Transact-SQL 设置和数据库镜像运行模式

本主题从 ALTER DATABASE 设置和镜像数据库状态以及见证服务器状态的角度介绍数据库镜像会话的操作。 本主题针对主要或专门使用 Transact-SQL(而不是使用 MicrosoftSQL Server Management Studio)管理数据库镜像的用户。 如果您不熟悉运行模式,请参阅数据库镜像会话

注意注意

除了可以使用 Transact-SQL 以外,还可以使用“数据库属性”对话框的“镜像”页在对象资源管理器中控制会话的运行模式。 有关详细信息,请参阅如何配置数据库镜像会话 (SQL Server Management Studio)

事务安全设置和见证服务器状态如何影响运行模式

会话的运行模式由会话的事务安全设置和见证服务器状态这二者决定。 数据库所有者可随时更改事务安全级别,并可添加或删除见证服务器。

事务安全

事务安全是镜像特定的数据库属性,用于确定数据库镜像会话是同步运行还是异步运行。 有两种安全级别:FULL 和 OFF。

  • SAFETY FULL

    完整事务安全可使会话在高安全性模式下同步运行。 如果存在见证服务器,则会话支持自动故障转移。

    使用 ALTER DATABASE 语句建立会话时,会话将在 SAFETY 属性设置为 FULL 的情况下开始;即会话将在高安全性模式下开始。 会话开始之后,便可添加见证服务器。

    有关详细信息,请参阅同步数据库镜像(高安全性模式)

  • SAFETY OFF

    关闭事务安全可使会话在异步、高性能模式下运行。 如果 SAFETY 属性设置为 OFF,则 WITNESS 属性也应该设置为 OFF(默认值)。 有关高性能模式下见证服务器的影响的信息,请参阅本主题后面的“见证服务器状态”。 有关在事务安全被关闭的情况下运行的详细信息,请参阅异步数据库镜像(高性能模式)

数据库的事务安全设置记录在每个伙伴的 sys.database_mirroring 目录视图中的 mirroring_safety_levelmirroring_safety_level_desc 列内。 有关详细信息,请参阅sys.database_mirroring (Transact-SQL)

数据库所有者可以随时更改事务安全级别。

见证服务器状态

如果已设置了见证服务器,则需要仲裁,因此见证服务器状态始终很重要。

如果见证服务器存在,则会具有以下两种状态之一:

  • 当见证服务器连接到伙伴时,见证服务器相对于该伙伴处于 CONNECTED 状态,并且和该伙伴具有仲裁。 在此情况下,即使有一个伙伴不可用,也可以使用数据库。

  • 如果见证服务器存在,但是未连接到伙伴,则见证服务器相对于该伙伴处于 UNKOWN 或 DISCONNECTED 状态。 在此情况下,见证服务器和该伙伴缺少仲裁,并且如果伙伴双方未彼此连接,则数据库不可用。

有关仲裁的信息,请参阅仲裁:见证服务器如何影响数据库可用性

服务器实例上每个见证服务器的状态都记录在 sys.database_mirroring 目录视图中的 mirroring_witness_statemirroring_witness_state_desc 列中。 有关详细信息,请参阅sys.database_mirroring (Transact-SQL)

下表总结了会话的事务安全设置和见证服务器的状态是如何决定会话运行模式的。

运行模式

事务安全

见证服务器状态

高性能模式

OFF

NULL(无见证服务器)2

不带自动故障转移功能的高安全性模式

FULL

NULL(无见证服务器)

具有自动故障转移功能的高安全性模式 1

FULL

CONNECTED

1 如果见证服务器断开连接,则建议您设置 WITNESS OFF,直到见证服务器实例变为可用。

2 如果见证服务器处在高性能模式下,它不会参与会话。 但是,若要使数据库可用,必须至少有两个服务器实例保持连接。 因此,建议您在高性能模式会话中,始终将 WITNESS 属性设置为 OFF。 有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性

查看安全设置和见证服务器状态

若要针对数据库查看安全设置和见证服务器的状态,请使用 sys.database_mirroring 目录视图。 相关列如下所示:

因素

说明

事务安全

mirroring_safety_levelmirroring_safety_level_desc

镜像数据库上用于更新的事务安全设置,如下所示:

UNKNOWN

OFF

FULL

NULL= 数据库没有在线。

是否存在见证服务器?

mirroring_witness_name

数据库镜像见证服务器的名称或 NULL(指示不存在见证服务器)。

见证服务器状态

mirroring_witness_statemirroring_witness_state_desc

给定伙伴上的数据库中的见证服务器状态:

UNKNOWN

CONNECTED

DISCONNECTED

NULL = 不存在见证服务器或数据库没有在线。

例如,在主体服务器或镜像服务器上,输入:

SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring

有关此目录视图的详细信息,请参阅 sys.database_mirroring (Transact-SQL)

丢失主体服务器时行为的影响因素

下表总结了丢失主体服务器时事务安全设置、数据库的状态以及见证服务器的状态对镜像会话行为的综合影响。

事务安全

镜像数据库的镜像状态

见证服务器状态

主体丢失时的行为

FULL

SYNCHRONIZED

CONNECTED

发生了自动故障转移。

FULL

SYNCHRONIZED

DISCONNECTED

镜像服务器将停止;无法进行故障转移,并且数据库不可用。

OFF

SUSPENDED 或 DISCONNECTED

NULL(无见证服务器)

可以对镜像服务器进行强制服务(可能造成数据丢失)。

FULL

SYNCHRONIZING 或 SUSPENDED

NULL(无见证服务器)

可以对镜像服务器进行强制服务(可能造成数据丢失)。