1.    概述

数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上。通常,这些服务器实例驻留在不同位置的计算机上。启动数据库上的数据库镜像操作时,在这些服务器实例之间形成一种关系,称为“数据库镜像会话”。其中一个服务器实例使数据库服务于客户端(“主体服务器”),另一个服务器实例则根据镜像会话的配置和状态,充当热备用或温备用服务器(“镜像服务器”)。同步数据库镜像会话时,数据库镜像提供热备用服务器,可支持在已提交事务不丢失数据的情况下进行快速故障转移。未同步会话时,镜像服务器通常用作热备用服务器(可能造成数据丢失)。在“数据库镜像会话”中,主体服务器和镜像服务器作为“伙伴”进行通信和协作。两个伙伴在会话中扮演互补的角色:“主体角色”和“镜像角色”。在任何给定的时间,都是一个伙伴扮演主体角色,另一个伙伴扮演镜像角色。每个伙伴拥有其当前角色。拥有主体角色的伙伴称为“主体服务器”,其数据库副本为当前的主体数据库。拥有镜像角色的伙伴称为“镜像服务器”,其数据库副本为当前的镜像数据库。如果数据库镜像部署在生产环境中,则主体数据库即为“生产数据库”。数据库镜像涉及尽快将对主体数据库执行的每项插入、更新和删除操作“重做”到镜像数据库中。重做通过将活动事务日志记录的流发送到镜像服务器来完成,这会尽快将日志记录按顺序应用到镜像数据库中。与逻辑级别执行的复制不同,数据库镜像在物理日志记录级别执行。从 SQL Server 2008 开始,在事务日志记录的流发送到镜像服务器之前,主体服务器会先将其压缩。在所有镜像会话中都会进行这种日志压缩。

2.      目的

发生灾难时,在具有自动故障转移功能的高安全性模式下,自动故障转移可快速使数据库的备用副本联机(而不会丢失数据)。在其他运行模式下,数据库管理员可以选择强制服务(可能丢失数据),以替代数据库的备用副本

3.      测试环境

3.1.       主服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4x

3.2.       镜像服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4y

3.3.       见证服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4z

4.      配置镜像

4.1.       准备工作

4.1.1.  账户建立

Windows账户建立:分别在”主服务器”,”镜像服务器”,”见证服务器”,上建立本地帐号”public”,密码设置相同。

4.1.2.  端口开放

保持三台服务器端口5022端口可用,可用telnet命令测试,telnetIP 5022(建立完通讯端点后测试)

4.2.       配置镜像(基于工作组模式)

4.2.1.  主服务器上执行

use master
  go
  --创建登陆账户
  create login [TestServer1\public] from windows
  go
  --创建通讯端点
  create endpoint endpointmirror
  state=started --创建的同时激活端点
  as
  tcp(listener_port=5022)
  for 
  database_mirroring(encryption=supported,role=partner)
  go
  --授予账户[TestServer1\public]对端点的connect权限
  grant connect on endpoint::endpointmirror to [TestServer1\public]
  go
  --数据库模式确认
  alter database Northwind set Recovery full with no_wait
  go
  --在主服务器上进行数据库备份
  backup database Northwind
  to disk='d:\dbbackup\Northwind.bak'

4.2.2.  镜像服务器上执行

use master
  go
  --创建登陆账户
  create login [TestServer2\public] from windows
  go
  --创建通讯端点
  create endpoint endpointmirror
  state=started --创建的同时激活端点
  as
  tcp(listener_port=5022)
  for 
  database_mirroring(encryption=supported,role=partner)
  go
  --授予账户[TestServer2\public]对端点的connect权限
  grant connect on endpoint::endpointmirror to [TestServer2\public]
  go
  
  --在镜像服务器上还原数据库(前提数据库备份已拷贝)
  restore database Northwind
  from disk='d:\dbbackup\Northwind.bak'
  with file=1,norecovery

4.2.3.  启动镜像

4.2.3.1.      镜像服务器执行

--启动镜像
  alter database Northwind
  set partner='TCP://192.168.102.4x:5022'

4.2.3.2.      主体服务器执行

--启动镜像
  alter database Northwind
  set partner='TCP://192.168.102.4y:5022'

4.2.4.  测试镜像效果

4.2.4.1.      主体服务器执行

use Northwind
  go
  create table table12(id int)

4.2.4.2.      镜像服务器执行

use master
  go
  if exists(select 1 from sys.databases 
                     where name='snap_Northwind')
  drop database snap_Northwind
  go
  create database  snap_Northwind
  on
  (name=Northwind,filename='C:\....\snap_Northwind.snap')
  as snap of Northwind
  go
  use  snap_Northwind
  go
  select name from sys.tables

4.2.4.3.      通过镜像监视器查看镜像状态

4.2.4.4.      使用系统视图查看镜像的状态

select * from sys.database_mirroring
  go
  select * from sys.database_mirroring_endpoints
  go
  select * from sys.database_mirroring_witness

4.2.5.  加入见证服务器

4.2.5.1.      见证服务器执行

use master
  go
  --创建登陆账户
  create login [TestServer3\public] from windows
  go
  --创建通讯端点
  create endpoint endpointmirror
  state=started --创建的同时激活端点
  as
  tcp(listener_port=5022)
  for 
  database_mirroring(encryption=supported,role=witness)
  go
  --授予账户[TestServer3\public]对端点的connect权限
  grant connect on endpoint::endpointmirror to [TestServer3\public]
  go

4.2.5.2.      主体服务器执行

--加入见证服务器
  alter database Northwind
  set witness='TCP://192.168.102.4z:5022'

5.      故障模拟

5.1.       数据库损坏

5.1.1.  停止主服务器的SQLServer服务。

5.1.2.  此时辅助服务器自动切换为主体角色(主体已断开连接)(192.168.102.4y)

5.1.3.  启动原主体数据库的SQLServer服务(192.168.102.4x)

5.1.4.  此时192.168.102.4y变为(主体/已同步)状态,192.168.102.4x变成(镜像/已经同步)

5.2.       手动切换

5.2.1.  主体服务器执行

alter database Northwind
  set partner failover

5.2.2.  主体及镜像角色自动实现了切换

6.      总结

6.1.       注意点

6.1.1.  基于工作组的镜像,需要在各服务器上建立相同的本地帐号,且密码相同

6.1.2.  启动镜像必须从镜像服务器开始执行

6.1.3.  见证服务器需要在主体服务器上加入

6.1.4.  数据库模式需要为完整模式

6.1.5.  各服务器的版本必须相同

6.1.6.  保证镜像数据库有足够的空间容纳镜像数据库

6.1.7.  在镜像服务器上还原数据库,要用Norecovery选项

6.1.8.  如果数据库镜像已经停止,则必须将对主体数据库执行的所有后续日志备份应用到镜像数据库中,然后才可以重新启动镜像

6.2.       结论

6.2.1.  基于工作组的镜像操作起来比基于证书的要简单,切换容易

6.2.2.  SQLAgent对于镜像来说是非必须的,不同于Log Shipping

6.3.       知识点

6.3.1.  修改数据库的所有者

alter authorization on Database::Northwind to [sa]

DatabaseMirroring搭建的更多相关文章

  1. SQL Server非域(跨域)环境下镜像(Mirror)的搭建步骤及注意事项

    在实际的生产环境下,我们经常需要跨域进行数据备份,而创建Mirror是其中一个方案.但跨域创建Mirror要相对复杂的多,需要借助证书进行搭建. 下面我们将具体的步骤总结如下: 第一部分 创建证书 S ...

  2. 非域环境下SQL Server搭建Mirror(镜像)的详细步骤

    1.测试验证环境 服务器角色 机器名 IP SQL Server Ver 主体服务器 WIN-TestDB4O 172.83.XXX.XXX SQL Server 2012 - 11.0.5058.0 ...

  3. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  4. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  5. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  6. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  7. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  8. 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题

    千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...

  9. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

随机推荐

  1. 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

    这个是LeetCode上的一道题目.本机上运行时正确的,但是LeetCode上显示是错误的,所以没有办法了只能记录在博客上了. 我的想法是先把pattern和str都转化成数组.例如"abb ...

  2. JAVA 图形开发之计算器设计(事件监听机制)

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 前段时间刚帮同学用MFC写了个计算器,现在学到JAVA的图形开发,就试着水了一个计算器出来.(可以说 ...

  3. Django 性能测试

    唐纳德·克努特(Donald Knuth)曾经说过:“不成熟的优化方案是万恶之源.”然而,任何一个承受高负载的成熟项目都不可避免地需要进行优化.在本文中,我想谈谈优化Web项目代码的五种常用方法.虽然 ...

  4. [BZOJ4129]Haruna’s Breakfast(树上带修改莫队)

    BZOJ3585,BZOJ2120,BZOJ3757三合一. 对于树上路径问题,树链剖分难以处理的时候,就用树上带修改莫队. 这里的MEX问题,使用BZOJ3585的分块方法,平衡了时间复杂度. 剩下 ...

  5. 8.4 正睿暑期集训营 Day1

    目录 2018.8.4 正睿暑期集训营 Day1 A 数对子 B 逆序对 C 盖房子 考试代码 A B C 2018.8.4 正睿暑期集训营 Day1 时间:4.5h(实际) 期望得分:30+50+3 ...

  6. python简单实现队列和栈push、pop操作

    栈: # -*- coding: utf-8 -*- #定义序列 lst=[] def pop(): if(len(lst)==0): print"栈为空","无法出栈& ...

  7. bzoj 4004 向量拟阵

    题解RT. eps = 1e-10 WrongAnswer eps = 1e-5 Accepted /************************************************* ...

  8. Nancyfx框架在传统Webform项目中的应用

    最近有个老项目需要做一个需求更迭,老项目是基于传统的webform项目的 为了更好的前后台交互,决定引入Nancyfx框架 关于Nancyfx框架框架是啥就不多介绍了 总的来说是一款轻量级的web框架 ...

  9. Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力

    B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...

  10. Codeforces Round #369 (Div. 2) E. ZS and The Birthday Paradox 数学

    E. ZS and The Birthday Paradox 题目连接: http://www.codeforces.com/contest/711/problem/E Description ZS ...