加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLSERVER镜像主服务器宕机或主实例崩溃恢复

发布时间:2020-12-12 14:52:00 所属栏目:MsSql教程 来源:网络整理
导读:测试: 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 S


测试: 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里面的语句?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读