使用 Windows 身份验证建立数据库镜像会话(Transact-SQL)

注释

此功能将在Microsoft SQL Server 的未来版本中删除。 避免在新开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 请改用Always On可用性组。

准备镜像数据库(请参阅 准备镜像数据库进行镜像(SQL Server)后,可以建立数据库镜像会话。 主体、镜像和见证服务器实例必须是单独的服务器实例,该实例应位于单独的主机系统上。

重要

建议在非高峰时段配置数据库镜像,因为配置镜像可能会影响性能。

注释

给定的服务器实例可以与相同或不同的合作伙伴参与多个并发数据库镜像会话。 服务器实例可以是某些会话中的合作伙伴,也可以是其他会话中的见证服务器。 镜像服务器实例必须运行与主体服务器实例相同的 SQL Server 版本。 数据库镜像在 MicrosoftSQL Server 的每个版本中都不可用。 有关 SQL Server 各版本支持的功能列表,请参阅 SQL Server 2014 各版本支持的功能。 此外,极力建议这些服务器实例在可以处理相同工作负荷的类似系统上运行。

建立数据库镜像会话

  1. 创建镜像数据库。 有关详细信息,请参见准备镜像数据库用于镜像 (SQL Server)

  2. 在每个服务器实例上设置安全性。

    数据库镜像会话中的每个服务器实例都需要一个数据库镜像终结点。 如果终结点不存在,则必须创建它。

    注释

    服务器实例用于数据库镜像的身份验证形式是其数据库镜像端点的一个属性。 两种类型的传输安全性可用于数据库镜像:Windows 身份验证或基于证书的身份验证。 有关详细信息,请参阅数据库镜像和 AlwaysOn 可用性组的传输安全性(SQL Server)。

    在每个伙伴服务器上,确保存在用于数据库镜像的端点。 无论支持的镜像会话数如何,服务器实例只能有一个数据库镜像终结点。 如果打算将此服务器实例专门用于数据库镜像会话中的合作伙伴,可以将合作伙伴的角色分配给终结点(ROLE**=**PARTNER)。 如果您还打算将此服务器用作其他数据库镜像会话中的见证服务器,请将终结点的角色设置为“ALL”。

    若要执行 SET PARTNER 语句,必须将两个合作伙伴的终结点的状态设置为 STARTED。

    若要了解服务器实例是否具有数据库镜像终结点并了解该实例的角色和状态,请使用以下 Transact-SQL 语句:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints  
    

    重要

    不要重新配置正在使用的数据库镜像终结点。 如果数据库镜像终结点存在且已在使用中,建议对服务器实例上的每个会话使用该终结点。 删除正在使用的终结点可能会导致终结点重启,从而中断现有会话的连接,这似乎是其他服务器实例的错误。 在具有自动故障转移的高安全模式下,这一点尤其重要,在此模式下,在合作伙伴上重新配置终结点可能会导致故障转移。 此外,如果为会话设置了见证服务器,删除数据库镜像终结点可能会导致该会话的主服务器丢失仲裁;如果这种情况发生,数据库将被置于离线状态,其用户将被断开连接。 有关详细信息,请参阅仲裁机制:见证角色如何影响数据库可用性(镜像)。

    如果任一合作伙伴缺少终结点,请参阅“为 Windows 身份验证创建数据库镜像终结点”(Transact-SQL)。

  3. 如果服务器实例在不同的域用户帐户下运行,则每个实例都需要登录其他域的 master 数据库中。 如果登录名不存在,则必须创建它。 有关详细信息,请参阅 “允许使用 Windows 身份验证(SQL Server)对数据库镜像终结点进行网络访问”。

  4. 若要将主体服务器设置为镜像数据库的伙伴,请连接到镜像服务器,并发出以下语句:

    ALTER DATABASE <database_name> SET PARTNER =<server_network_address>

    其中 <database_name> 是要镜像的数据库的名称(此名称在两个伙伴上相同), <server_network_address> 是主体服务器的服务器网络地址。

    服务器网络地址的语法如下所示:

    TCP://<system-address><port>

    其中<,系统地址>是一个明确标识目标计算机系统的字符串,端口><是伙伴服务器实例的镜像终结点使用的端口号。 有关详细信息,请参阅指定服务器网络地址(数据库镜像)

    例如,在镜像服务器实例上,以下 ALTER DATABASE 语句将伙伴设置为原始主体服务器实例。 数据库名称为 AdventureWorks,系统地址DBSERVER1合作伙伴的系统名称,合作伙伴的数据库镜像终结点使用的端口为 7022:

    ALTER DATABASE AdventureWorks   
       SET PARTNER = 'TCP://DBSERVER1:7022'  
    

    此语句使镜像服务器准备好,当主体服务器发起联系时能够形成一个会话。

  5. 若要将镜像服务器设置为主体数据库上的伙伴,请连接到主体服务器,并发出以下语句:

    ALTER DATABASE <database_name> SET PARTNER =<server_network_address>

    有关详细信息,请参阅步骤 4。

    例如,在主体服务器实例上,以下 ALTER DATABASE 语句将伙伴设置为原始镜像服务器实例。 数据库名称为 AdventureWorks,系统地址DBSERVER2合作伙伴的系统名称,合作伙伴的数据库镜像终结点使用的端口为 7025:

    ALTER DATABASE AdventureWorks SET PARTNER = 'TCP://DBSERVER2:7022'  
    

    在主体服务器上输入此语句将开始数据库镜像会话。

  6. 默认情况下,会话设置为完全事务安全(SAFETY 设置为 FULL),会话将以同步、高安全性模式启动,而无需自动故障转移。 可以将会话重新配置为在以下模式下运行:具有自动故障转移功能的高安全模式或异步高性能模式,如下所示:

示例:

注释

以下示例为现有镜像数据库建立合作伙伴之间的数据库镜像会话。 有关创建镜像数据库的信息,请参阅 准备镜像数据库(SQL Server)=。

该示例演示了在没有见证服务器的情况下创建数据库镜像会话的基本步骤。 这两个合作伙伴是两台计算机系统上的默认服务器实例(PARTNERHOST1和PARTNERHOST5)。 这两个合作伙伴实例运行相同的 Windows 域用户帐户(MYDOMAIN\dbousername)。

  1. 在主体服务器实例(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.  
    
  2. 在镜像服务器实例(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.  
    
  3. 在主体服务器实例(PARTNERHOST1)上备份数据库:

    BACKUP DATABASE AdventureWorks   
        TO DISK = 'C:\AdvWorks_dbmirror.bak'   
        WITH FORMAT  
    GO  
    
  4. 在镜像服务器实例(on) PARTNERHOST5上,还原数据库:

    RESTORE DATABASE AdventureWorks   
        FROM DISK = 'Z:\AdvWorks_dbmirror.bak'   
        WITH NORECOVERY  
    GO  
    
  5. 创建完整数据库备份后,必须在主体数据库上创建日志备份。 例如,以下 Transact-SQL 语句将日志备份到上述数据库备份使用的同一文件:

    BACKUP LOG AdventureWorks   
        TO DISK = 'C:\AdventureWorks.bak'   
    GO  
    
  6. 在开始镜像之前,必须应用所需的日志备份(以及任何后续日志备份)。

    例如,以下 Transact-SQL 语句从 C:\AdventureWorks.bak还原第一个日志:

    RESTORE LOG AdventureWorks   
        FROM DISK = 'C:\ AdventureWorks.bak'   
        WITH FILE=1, NORECOVERY  
    GO  
    
  7. 在镜像服务器实例上,将PARTNERHOST1上的服务器实例设置为合作伙伴(使其成为初始主体服务器):

    USE master;  
    GO  
    ALTER DATABASE AdventureWorks   
        SET PARTNER =   
        'TCP://PARTNERHOST1:7022'  
    GO  
    

    重要

    默认情况下,数据库镜像会话在同步运行模式下进行,这具体取决于是否具备完全事务安全性(SAFETY 设置为 FULL)。 若要使会话在异步高性能模式下运行,请将 SAFETY 设置为 OFF。 有关详细信息,请参阅 数据库镜像操作模式

  8. 在主体服务器实例上 PARTNERHOST5 ,将服务器实例设置为合作伙伴(使其成为初始镜像服务器):

    USE master;  
    GO  
    ALTER DATABASE AdventureWorks   
        SET PARTNER = 'TCP://PARTNERHOST5:7022'  
    GO  
    
  9. (可选)如果计划使用带有自动故障转移的高安全模式,则请设置见证服务器实例。 有关详细信息,请参阅使用 Windows 身份验证添加数据库镜像见证(Transact-SQL)。

注释

有关安全设置、准备镜像数据库、配置合作伙伴以及添加见证的完整示例,请参阅“设置数据库镜像”(SQL Server)。

另请参阅

设置数据库镜像 (SQL Server)
ALTER DATABASE (Transact-SQL)
允许使用 Windows 身份验证访问网络数据库镜像终结点(SQL Server)
为镜像准备镜像数据库 (SQL Server)
创建使用 Windows 身份验证的数据库镜像端点 (Transact-SQL)
数据库镜像和日志传送 (SQL Server)
数据库镜像 (SQL Server)
数据库镜像和复制 (SQL Server)
设置数据库镜像 (SQL Server)
指定服务器网络地址(数据库镜像)
数据库镜像运行模式