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