sql server 2012数据库镜像

  

以下通过域帐户来配置数据库镜像:

一、环境准备

1、准备计算机

  AD02为域控制器/DNS服务器(sz1card1.com),IP:192.168.2.218/24,AD02安装成为域控制器、DNS服务(这里不做演示)

  W67为主体服务器,IP:192.168.2.67/24,安装SQL SERVER 2012 企业核心版(这里不做演示)

  W65为镜像服务器,IP:192.168.2.65/24,安装SQL SERVER 2012 企业核心版(这里不做演示)

   注:测试环境关闭所有防火墙 ,准备镜像用的数据库为test库   

2、测试直接使用administrator域控管理员用户和密码(*********),建议自行在域控制器创建新的域用户帐户(确保该账户密码永不过期)


二、部署实验

1、在W65、W67服务器的SQL数据库上,在“管理工具”中打开“服务”(或者用“SQL Server 配置管理器”),修改SQL Server实例的属性,将登录身份改为设置sz1card1\administrator。修改之后,重启SQL Server实例。

sql server 2012数据库镜像_第1张图片

2、W65、W67服务器的SQL数据库,右键实例选择“方面”,选择“外围应用配置器”―将属性“RemoteDACEnabled”的值改为“True”

3、确认W67服务器test数据库必须是“完整恢复模式”,备份类型选择”完整“,点击”确定“ ;选择备份类型为”事务日志“,点击”确定“完成对事务日志的备份,完整备份和日志备份完后,拷贝至W65服务器准备做还原

sql server 2012数据库镜像_第2张图片

sql server 2012数据库镜像_第3张图片

4、W65服务器创建test库(此数据库名称必须与W67中创建的数据库名称保持一致) ,并且修改为“完整恢复模式”,右键新创建的数据库“test”--选择“任务”―“还原”―“数据库”,选择设备-->添加,选择刚才从W67复制的备份文件(含备份数据库和日志),点击”确定” , 在“选项”页面勾选“覆盖现有数据库”,恢复状态选择“RESTORE WITH NORECOVERY”,取消勾选“还原前进行结尾日志备份”,点击“确定”,这时W65上的test数据库处于还原的状态

sql server 2012数据库镜像_第4张图片

sql server 2012数据库镜像_第5张图片

5、数据库镜像配置,在主体服务器W67右键“test”选择“任务”―“镜像” ,点击“配置安全性”,跟进向导配置主体服务器配置,默认镜像为同步(镜像模式类型优缺点可参照微软官网文档)

sql server 2012数据库镜像_第6张图片

sql server 2012数据库镜像_第7张图片

sql server 2012数据库镜像_第8张图片

sql server 2012数据库镜像_第9张图片

sql server 2012数据库镜像_第10张图片

6、W67镜像配置成功后,启动开始镜像,这时W67服务器上test数据库处于“主体,已同步”,W65服务器上镜像数据库test数据库处于“镜像,已同步\正在还原”

  注:镜像数据库test处于正在还原状态,是不可读写的,作为故障转移切换用,不能分担读或写!

sql server 2012数据库镜像_第11张图片

7、可在W67服务器选择test数据库右键--任务--启动镜像监视器,查看同步状态

sql server 2012数据库镜像_第12张图片

8、测试:主体数据库在test库,users表,增加一条记录,

   INSERT users VALUES(11,'TEST')

sql server 2012数据库镜像_第13张图片

sql server 2012数据库镜像_第14张图片

   注:由于镜像同步方式,并且当前同步状态正常,测试数据不多,数据很快同步至镜像库,但由于镜像库当前不可读写,看不到刚刚添加的数据,只能以下模拟故障切换镜像库为主库,验证数据。

9、手动切换故障,W67服务器test数据库,右键--任务--镜像--“故障转移”,转移成功后,当前W67服务器test数据库状态为“镜像,已同步\正在还原”,W65服务器test数据库,则为主体数据库,状态为“主体,已同步”

sql server 2012数据库镜像_第15张图片

注:切换成功,并且数据验证正常


若:出现主体服务器,宕机情况呢!如这时的主体W65出现宕机了,W67镜像库状态为“正在恢复”,同样不可访问。这时只能手工执行命令切换,在镜像库master系统执行以下命令:

--This script does a failover of all the databases in a database mirroring session   
--to the Mirror server. This will be used in cases where the PRINCIPAL server is no longer available   
--and the mirrored databases have to be brought online.     
--NOTE: Run this script in the MIRRORED server instance   SET NOCOUNT OFF    
DECLARE @strSQL NVARCHAR(200) --variable for dynamic SQL statement - variable size should change depending on the    
DECLARE @strDatabasename NVARCHAR(50) --variable for destination directory    
DECLARE MyCursor CURSOR FOR --used for cursor allocation    
   SELECT name FROM master.sys.databases a   
   INNER JOIN master.sys.database_mirroring b   
   ON a.database_id=b.database_id   
   WHERE NOT mirroring_guid IS NULL   
   AND mirroring_role_desc='MIRROR'   
OPEN MyCursor    
FETCH Next FROM MyCursor INTO @strDatabasename    
WHILE @@Fetch_Status = 0    
BEGIN    
   ---Run the ALTER DATABASE databaseName SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS   
   SET @strSQL = 'ALTER DATABASE ' + @strDatabaseName + ' SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS'    
   EXEC sp_executesql @strSQL    
 
      PRINT 'Bringing ' + @strDatabaseName + ' ONLINE'    
   PRINT '========================================'       
FETCH Next FROM MyCursor INTO @strDatabasename    
END     
CLOSE MyCursor    
DEALLOCATE MyCursor

执行成功后,W67又变为主体,当前的状态为“主体,已断开连接”(由于W65还未恢复)

恢复启动W65这时,test库状态为“镜像,挂起”,W67为“主体,挂起”,,需要手动在“任务”--镜像--点击“继续”,这时同步恢复到最初镜像同步状态!!

sql server 2012数据库镜像_第16张图片