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实例。
2、W65、W67服务器的SQL数据库,右键实例选择“方面”,选择“外围应用配置器”―将属性“RemoteDACEnabled”的值改为“True”
3、确认W67服务器test数据库必须是“完整恢复模式”,备份类型选择”完整“,点击”确定“ ;选择备份类型为”事务日志“,点击”确定“完成对事务日志的备份,完整备份和日志备份完后,拷贝至W65服务器准备做还原
4、W65服务器创建test库(此数据库名称必须与W67中创建的数据库名称保持一致) ,并且修改为“完整恢复模式”,右键新创建的数据库“test”--选择“任务”―“还原”―“数据库”,选择设备-->添加,选择刚才从W67复制的备份文件(含备份数据库和日志),点击”确定” , 在“选项”页面勾选“覆盖现有数据库”,恢复状态选择“RESTORE WITH NORECOVERY”,取消勾选“还原前进行结尾日志备份”,点击“确定”,这时W65上的test数据库处于还原的状态
5、数据库镜像配置,在主体服务器W67右键“test”选择“任务”―“镜像” ,点击“配置安全性”,跟进向导配置主体服务器配置,默认镜像为同步(镜像模式类型优缺点可参照微软官网文档)
6、W67镜像配置成功后,启动开始镜像,这时W67服务器上test数据库处于“主体,已同步”,W65服务器上镜像数据库test数据库处于“镜像,已同步\正在还原”
注:镜像数据库test处于正在还原状态,是不可读写的,作为故障转移切换用,不能分担读或写!
7、可在W67服务器选择test数据库右键--任务--启动镜像监视器,查看同步状态
8、测试:主体数据库在test库,users表,增加一条记录,
INSERT users VALUES(11,'TEST')
注:由于镜像同步方式,并且当前同步状态正常,测试数据不多,数据很快同步至镜像库,但由于镜像库当前不可读写,看不到刚刚添加的数据,只能以下模拟故障切换镜像库为主库,验证数据。
9、手动切换故障,W67服务器test数据库,右键--任务--镜像--“故障转移”,转移成功后,当前W67服务器test数据库状态为“镜像,已同步\正在还原”,W65服务器test数据库,则为主体数据库,状态为“主体,已同步”
注:切换成功,并且数据验证正常
若:出现主体服务器,宕机情况呢!如这时的主体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为“主体,挂起”,,需要手动在“任务”--镜像--点击“继续”,这时同步恢复到最初镜像同步状态!!