SQLSERVER镜像主服务器宕机或主实例崩溃恢复
测试: 1、 将157上主库切到镜像库158上? 切换语句(1) 如下:? use master? alter database LotBill set safety FULL;? ALTER DATABASE LotBill SET PARTNER FAILOVER; ? use master? alter database xclottery set safety FULL;? ALTER DATABASE xclottery SET PARTNER FAILOVER;? 此时157与158库中设置了镜像的库状态互换 :“主体,已同步” ? ? ? ?“正在还原...”? 主备库切换正常。? ? 2、 停掉157上SQLSERVER服务(模拟主库服务崩溃状况) ? 此时157机器上库不可访问,158机器上库的状态为“正在恢复”,同样不可访问。? 在实际情况下,如157上主库迟迟没有恢复的迹象,为不影响正常服务,需要在158上执行下面第3点中的脚本。? 开启157上的SQLSERVER服务,157机器上库的状态恢复为“主体,已同步”,158上库状态恢复为“正在还原...”,此时157机器恢复访问。? ? 3、 关闭157机器(模拟整个服务器崩溃的状况)? Nagios监控两机器的情况如下: ? 此时镜像库处于“正在恢复”状态。? 当主服务器宕机或主实例崩溃时,在从库(158)执行如下脚本(可能有数据的丢失):? ? --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 ?? 成功执行后提示如下:? ? ?? ? ? 158机器数据库状态由“正在恢复”转为“主体,已断开连接”如下(需要刷新下):? ? ? ?? ?开起157机器(模拟原主库恢复的状况)。? 157上库状态如下:? ? 此时158 的状态如下:? ? 当原来的主服务器(157)恢复时,其数据库将处于“正在还原?”状态,而原来的镜像库(即现在的主体库 158)将处于“主体,挂起”状态。若 要继续正常进行镜像,需在现在的主服务器(158)上恢复镜像,使用如下语句:? use master? alter database LotBill set partner resume;? alter database lotface set partner resume;? 刷新数据库,查看状态,158上数据库将回到“主体,已同步”状态,而157 上库状态则处于“正在还原?”? ? ? ? ? ? ------------------------------------------------------------------------------------------------------------------------------------? 注(1):以下主从库切换,无特别说明均使用注1里面的语句? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |