在单个服务器场中故障转移和恢复镜像数据库

本文介绍如何对已经(按照通过使用 SQL Server 数据库镜像配置单个服务器场中的可用性一文中的步骤)配置为使用高可用性数据库镜像的 Microsoft Office SharePoint Server 2007 服务器场进行故障转移和恢复。

本文包含以下几个部分:

  • 镜像数据库的自动故障转移过程

  • 镜像数据库的手动故障转移过程

  • 监视和通知镜像故障转移

  • 作业:对所有剩余的数据库进行故障转移

  • 作业:更新连接别名

  • 故障回复

  • 小结

对正在运行镜像数据库的 Office SharePoint Server 2007 环境进行故障转移时,必须发生以下过程:

  • 对主体服务器上的一个或多个数据库以自动或手动方式故障转移到镜像。

  • 主体服务器上的所有其他数据库被强制进行故障转移。

    我们建议使用 Microsoft SQL Server 2005 通知和作业来监视镜像以及强制所有数据库进行故障转移。

  • 引用数据库的所有前端 Web 服务器和计算机上的连接别名被重置为指向镜像服务器。

镜像数据库的自动故障转移过程

主体服务器与数据库镜像配置的其余部分中断通信时将发生自动故障转移,镜像服务器和见证服务器将保持通信。

备注

如果所有服务器实例都中断通信,则不会发生自动故障转移,即使见证服务器和镜像服务器后来恢复通信也是如此。

触发自动故障转移时,将发生以下过程:

  1. 如果主体服务器仍在运行,则它会将主体数据库的状态更改为“已断开连接”,并将断开所有客户端与主体数据库之间的连接。

  2. 见证服务器和镜像服务器将“主体服务器不可用”记录下来。

  3. 如果恢复队列中有任何等待的日志,则镜像服务器将完成前滚镜像数据库的操作。应用日志所需的时间取决于系统速度、最近的工作负荷以及恢复队列中的日志量。

  4. 当以前的主体服务器重新加入会话时,它会认识到其故障转移伙伴现在拥有了主体角色。以前的主体服务器将担当镜像服务器的角色,并且以前的主体数据库将成为镜像数据库。新镜像服务器会尽快使新镜像数据库与主体数据库保持同步。只要新镜像服务器已与数据库重新保持了同步,就可以再次进行故障转移,但按相反方向进行。

有关自动故障转移的更详细说明,请参阅自动故障转移 (https://go.microsoft.com/fwlink/?linkid=83690&clcid=0x804)。

镜像数据库的手动故障转移过程

如果主体服务器和镜像服务器都仍在运行,则通常应进行手动故障转移。管理员可以按自己的意愿决定将活动数据库从主体切换到镜像。

以下过程发生在手动故障转移期间:

  1. 管理员连接到主体服务器,并针对每个数据库发出以下 Transact-SQL 命令:

    USE master;
    ALTER DATABASE <database_name> SET PARTNER FAILOVER; -- where database_name is the mirrored database. 
    

    此语句会将镜像服务器立即转换为主体角色。

  2. 在以前的主体服务器上,客户端将与数据库断开连接,并且未提交的事务将被回滚。

如果使用一个包括见证服务器的自动故障转移设置来运行手动故障转移,则主体服务器和镜像服务器将自动切换角色。

监视和通知镜像故障转移

使用 SQL Server 通知可以监视镜像,并运行强制故障转移的作业。在 SQL Server 的主体实例和镜像实例上都应该使用作业和通知。

通知:检测单个数据库是否从主体切换到镜像

在此通知中,Transact-SQL 命令用于检测是否已将任何数据库切换到相应的镜像数据库。

SELECT * FROM Database_MIRRORING_STATE_CHANGE 
WHERE State=8 AND (databasename='Central Administration' OR databasename='Configuration' 
ORdatabasename='SSP' 
OR databasename=’SSP Content' 
OR databasename='SSP Search' 
OR databasename='WSS Search' 
OR databasename='Content_<port>' )

作业:对所有剩余的数据库进行故障转移

发出检测通知后,将运行作业以使所有数据库故障转移到相应的镜像数据库。

下面的示例提供了一个 Transact-SQL 脚本,您可以在作业中使用该脚本对所有镜像数据库进行故障转移:

USE master;
DECLARE i CURSOR
READ_ONLY
FOR 
SELECT name FROM sys.databases WHERE database_id IN
(SELECT database_id FROM sys.database_mirroring WHERE mirroring_state=4)

DECLARE @name varchar(255)
DECLARE @cmd varchar(1000)
OPEN i

FETCH NEXT FROM i INTO @name
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
set @cmd = 'ALTER Database [' + @name + '] SET PARTNER FAILOVER;'
exec (@cmd)

DECLARE @message varchar(100)
SELECT @message = 'Failover for : ' + @name
PRINT @message
END
FETCH NEXT FROM i INTO @name
END

CLOSE i
DEALLOCATE i
GO

作业:更新连接别名

故障转移之后,必须在所有运行 Office SharePoint Server 2007 的计算机上,将与 SQL Server 连接别名关联的数据库服务器名称从主体服务器更改为镜像服务器。

备注

每个 Web 应用程序中的引用不会发生更改。因此,故障转移之后不需要在 Office SharePoint Server 2007 中进行任何操作。

创建一个在故障转移完成后运行的 SQL Server 作业。在此作业中,会运行一个命令将别名值的注册表设置更改为以下镜像:

\Registry\Machine\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo
<alias> = REG_SZ DBMSSOCN,DBMirror

备注

要用于运行 SQL Server 作业和通知的帐户必须具有适当的权限,才能在运行 Office SharePoint Server 2007 的计算机上更改注册表值。有关详细信息,请参阅给注册表项指派权限 (https://go.microsoft.com/fwlink/?linkid=116137&clcid=0x804)。

有关如何创建此作业的示例,请参阅使用数据库镜像对 SharePoint 进行高可用性的案例研究(白皮书)

故障回复

若要使故障回复到主体服务器,您必须手动对数据库进行故障回复。您可以使用相同的 SQL Server 作业来自动进行故障回复和自动重置 SQL Server 客户端连接别名。在运行作业之前,您必须更改作业中的值。

摘要

在单个服务器场环境中配置镜像后,建议您针对故障转移和故障回复来测试您的过程、通知、作业和脚本。如果单个数据库发生了故障转移,则您可能需要编写脚本,以便在将其他所有数据库故障转移到镜像服务器之前,首先尝试将故障回复到主体服务器。

下载此书籍

本主题包含在以下可下载书籍内,以方便您阅读和打印: