配置数据库镜像

适用于:SQL Server

注意

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

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

重要

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

备注

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

建立数据库镜像会话

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

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

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

    备注

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

    在每台主体服务器和镜像服务器上,请确保存在用于数据库镜像的端点。 无论支持的镜像会话数是多少,服务器实例都只能有一个数据库镜像端点。 如果只将该服务器实例用于数据库镜像会话中的伙伴,你可以为终结点分配伙伴角色 (ROLE**=**PARTNER)。 如果还要将该服务器用于其他数据库镜像会话中的见证服务器,则请将端点的角色分配为 ALL。

    若要执行 SET PARTNER 语句,必须将两个合作伙伴的端点的 STATE 都设置为 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>

    其中,<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. 在镜像服务器实例(位于 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。 有关详细信息,请参阅 Database Mirroring Operating Modes

  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)
指定服务器网络地址(数据库镜像)
数据库镜像运行模式