如何建立使用 Windows 身份验证的数据库镜像会话 (Transact-SQL)
准备好镜像数据库后(请参阅如何为镜像准备镜像数据库 (Transact-SQL)),便可以建立数据库镜像会话。主体服务器实例、镜像服务器实例和见证服务器实例都必须是单独的服务器实例,并位于单独的主机系统中。
重要提示: |
---|
我们建议您在非高峰时段配置数据库镜像,因为配置镜像会影响性能。 |
注意: |
---|
给定的服务器实例可以参与到多个具有相同或不同伙伴的并发数据库镜像会话中。某个服务器实例可能在某些会话中是伙伴,而在其他会话中则是见证服务器。镜像服务器实例必须与主体服务器实例运行相同版本的 SQL Server - Standard Edition 或 Enterprise Edition。此外,极力建议这些服务器实例在可以处理相同工作负荷的类似系统上运行。 |
建立数据库镜像会话
创建镜像数据库。有关详细信息,请参阅如何为镜像准备镜像数据库 (Transact-SQL)。
在每个服务器实例上设置安全性。
数据库镜像会话中的每个服务器实例都需要一个数据库镜像端点。如果端点不存在,则必须先创建。
注意: 服务器实例对数据库镜像使用的验证形式是其数据库镜像端点的一种属性。数据库镜像可以使用两种类型的传输安全性:Windows 身份验证或基于证书的身份验证。有关详细信息,请参阅数据库镜像传输安全性。 在每台主体服务器和镜像服务器上,请确保存在用于数据库镜像的端点。无论支持的镜像会话数是多少,服务器实例都只能有一个数据库镜像端点。如果只将该服务器实例用于数据库镜像会话中的主体服务器和镜像服务器,您可以为端点分配主体服务器或镜像服务器角色 (ROLE**=**PARTNER)。如果还要将该服务器用于其他数据库镜像会话中的见证服务器,则请将端点的角色分配为 ALL。
若要执行 SET PARTNER 语句,必须将两个合作伙伴的端点的 STATE 都设置为 STARTED。
若要了解服务器实例是否具有数据库镜像端点并了解其角色和状态,请对该实例使用以下 Transact-SQL 语句:
SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
重要提示: 请勿重新配置正在使用的数据库镜像端点。如果数据库镜像端点已存在并处于使用状态,则我们建议您将此端点用于服务器实例中的每一个会话。删除正在使用的端点可导致端点重新启动,中断现有会话的连接,从而导致其他服务器实例出现错误。这在具有自动故障转移功能的高安全性模式下尤为重要,在此模式下,在伙伴上重新配置端点可能会导致故障转移。此外,如果已经为会话设置了见证服务器,则删除数据库镜像端点会造成该会话的主体服务器失去仲裁;如果发生这种情况,数据库会进入离线状态,其用户也会断开连接。有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性。 如果主体服务器或镜像服务器缺少端点,请参阅如何创建使用 Windows 身份验证的镜像端点 (Transact-SQL)。
如果服务器实例使用不同的域用户帐户运行,则每个实例还需要在其他实例的 master 数据库中具有登录名。如果登录名不存在,则必须先创建。有关详细信息,请参阅如何允许使用 Windows 身份验证进行数据库镜像网络访问 (Transact-SQL)。
若要将主体服务器设置为镜像数据库中的伙伴,请连接到镜像服务器,然后执行下面的语句:
ALTER DATABASE <database_name> SET PARTNER =<server_network_address>
其中,<database_name> 是要镜像的数据库的名称(此名称在两个伙伴上相同),<server_network_address> 是主体服务器的服务器网络地址。
服务器网络地址的语法如下:
TCP**://<system-address>:**<port>
其中 <system-address> 是明确标识目标计算机系统的字符串,<port> 是伙伴服务器实例的镜像端点使用的端口号。有关详细信息,请参阅指定服务器网络地址(数据库镜像)。
例如,在镜像服务器实例中,下面的 ALTER DATABASE 语句将伙伴设置为原始主体服务器实例。数据库名称为 AdventureWorks,系统地址为 DBSERVER1(伙伴系统的名称),伙伴数据库镜像端点使用的端口为 7022:
ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://DBSERVER1:7022'
与主体服务器连接时,此语句将准备镜像服务器来形成会话。
若要将镜像服务器设置为主体数据库中的伙伴,请连接到主体服务器,然后执行下面的语句:
ALTER DATABASE <database_name> SET PARTNER =<server_network_address>
有关详细信息,请参阅步骤 4。
例如,在主体服务器实例中,下面的 ALTER DATABASE 语句将伙伴设置为原始镜像服务器实例。数据库名称为 AdventureWorks,系统地址为 DBSERVER2(伙伴系统的名称),伙伴数据库镜像端点使用的端口为 7025:
ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://DBSERVER2:7022'
在主体服务器上输入此语句将启动数据库镜像会话。
默认情况下,会话设置为完整事务安全(SAFETY 设置为 FULL),此设置会在同步、不带自动故障转移功能的高安全性模式下启动会话。您可以将会话重新配置为在具有自动故障转移功能的高安全性模式下运行,或者在异步、高性能模式下运行,如下所示:
- 具有自动故障转移的高安全性模式
如果希望高安全性模式会话支持自动故障转移,则请添加见证服务器实例。有关详细信息,请参阅如何使用 Windows 身份验证添加数据库镜像见证服务器 (Transact-SQL)。 - 高性能模式
另外,如果您不想进行自动故障转移,并且您对性能的追求超过了可用性,则请关闭事务安全。有关详细信息,请参阅如何更改数据库镜像会话中的事务安全 (Transact-SQL)。注意: 在高性能模式下,WITNESS 应设置为 OFF。有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性。
- 具有自动故障转移的高安全性模式
示例
注意: |
---|
下面的示例针对现有的镜像数据库在伙伴间建立了数据库镜像会话。有关创建镜像数据库的信息,请参阅如何为镜像准备镜像数据库 (Transact-SQL)。 |
该示例显示了创建没有见证服务器的数据库镜像会话的基本步骤。这两个伙伴是两个计算机系统(PARTNERHOST1 和 PARTNERHOST5)中的默认服务器实例。这两个伙伴实例运行相同的 Windows 域用户帐户 (MYDOMAIN\dbousername)。
注意: |
---|
有关显示安全设置、准备镜像数据库、设置伙伴和添加见证服务器的完整示例,请参阅设置数据库镜像。 |
在主体服务器实例(PARTNERHOST1 中的默认实例)中,创建支持所有使用端口 7022 的角色的端点:
--create an endpoint for this instance CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=ALL) GO --Partners under same domain user; login already exists in master.
注意: 有关如何设置登录名的示例,请参阅如何允许使用 Windows 身份验证进行数据库镜像网络访问 (Transact-SQL)。 在镜像服务器实例(PARTNERHOST5 中的默认实例)中,创建支持所有使用端口 7022 的角色的端点:
--create an endpoint for this instance CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=ALL) GO --Partners under same domain user; login already exists in master.
在主体服务器实例(位于 PARTNERHOST1)中,备份数据库:
BACKUP DATABASE AdventureWorks TO DISK = 'C:\AdvWorks_dbmirror.bak' WITH FORMAT GO
在镜像服务器实例(位于
PARTNERHOST5
)中还原数据库:RESTORE DATABASE AdventureWorks FROM DISK = 'Z:\AdvWorks_dbmirror.bak' WITH NORECOVERY GO
创建数据库的完整备份之后,必须在主体数据库中创建日志备份。例如,下面的 Transact-SQL 语句将日志备份到先前数据库备份所使用的同一个文件中:
BACKUP LOG AdventureWorks TO DISK = 'C:\AdventureWorks.bak' GO
在开始镜像之前,必须应用必要的日志备份(以及所有后续日志备份)。
例如,以下 Transact-SQL 语句还原 C:\AdventureWorks.bak 中的第一个日志:RESTORE LOG AdventureWorks FROM DISK = 'C:\ AdventureWorks.bak' WITH FILE=1, NORECOVERY GO
在镜像服务器实例中,将 PARTNERHOST1 中的服务器实例设置为伙伴(使它成为初始主体服务器):
ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://PARTNERHOST1:7022' GO
重要提示: 默认情况下,数据库镜像会话在同步模式下运行,这是由于将会话设置为完整事务安全(SAFETY 设置为 FULL)。若要使会话在异步、高性能模式下运行,请将 SAFETY 设置为 OFF。有关详细信息,请参阅数据库镜像会话和如何更改数据库镜像会话中的事务安全 (Transact-SQL)。 在主体服务器实例上,将
PARTNERHOST5
上的服务器实例设置为伙伴(使其成为初始镜像服务器):ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://PARTNERHOST5:7022' GO
或者,如果想使用具有自动故障转移功能的高安全性模式,则请设置见证服务器实例。有关详细信息,请参阅如何使用 Windows 身份验证添加数据库镜像见证服务器 (Transact-SQL)。
注意: |
---|
有关显示安全设置、准备镜像数据库、设置伙伴和添加见证服务器的完整示例,请参阅设置数据库镜像。 |
请参阅
任务
如何允许使用 Windows 身份验证进行数据库镜像网络访问 (Transact-SQL)
如何为镜像准备镜像数据库 (Transact-SQL)
如何创建使用 Windows 身份验证的镜像端点 (Transact-SQL)
概念
自动故障转移
数据库镜像会话
数据库镜像和日志传送
数据库镜像概述
复制和数据库镜像
指定服务器网络地址(数据库镜像)
Transact-SQL 设置和数据库镜像运行模式
其他资源
ALTER DATABASE (Transact-SQL)
设置数据库镜像