测试: 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里面的语句
转载于:https://blog.51cto.com/johnsz/711974