如何为镜像准备镜像数据库 (Transact-SQL)

只有存在镜像数据库才能启动数据库镜像会话。镜像数据库的名称必须与主体数据库的名称相同。数据库所有者或系统管理员可以从主体数据库的最新完整备份和至少一个后续日志备份中创建镜像数据库。为使镜像正常运行,镜像数据库必须保持 RESTORING 状态。因此,将备份还原到镜像数据库时,对于每个还原操作都必须始终使用 WITH NORECOVERY。

如果已删除镜像,并且该镜像数据库仍处于 RECOVERING 状态,则可以重新启动镜像。但是,首先在主体数据库中必须至少执行一个日志备份。然后在该镜像数据库中,必须使用 WITH NORECOVERY 还原删除镜像后对主体数据库执行的所有日志备份。

注意注意

不能镜像 mastermsdbtempmodel 系统数据库。

过程

为进行数据库镜像创建数据库

  1. 确保主体服务器实例和镜像服务器实例都已安装了 Microsoft SQL Server 2008。

  2. 验证数据库是否使用了完整恢复模式。

    有关详细信息,请参阅如何查看或更改数据库的恢复模式 (SQL Server Management Studio)sys.databases (Transact-SQL)ALTER DATABASE (Transact-SQL)

  3. 备份主体数据库以生成完整数据库备份。

    有关详细信息,请参阅如何备份数据库 (SQL Server Management Studio)如何创建完整数据库备份 (Transact-SQL)

    注意注意

    另外,可以还原现有的完整数据库备份,也可以还原差异数据库备份,然后再还原每个后续日志备份。

  4. 确保计划创建镜像数据库所在的系统的磁盘驱动器空间足以存储数据库。

  5. 除非在可从两个系统访问的网络驱动器上执行备份,否则,将数据库备份复制到该系统。

  6. 若要创建镜像数据库,请将完整数据库备份还原到镜像服务器实例上。RESTORE DATABASE database_name 语句必须指定 WITH NORECOVERY,其中,database_name 是要镜像的数据库的名称。

    注意注意

    如果要逐个文件组地还原数据库,则要确保还原整个数据库。

    另外,我们建议,如有可能,镜像数据库的路径(包括驱动器号)应该与主体数据库的路径相同。

    如果文件布局必须互不相同(例如,如果主体数据库位于“F:”驱动器上,但镜像系统没有“F:”驱动器),则必须在 RESTORE STATEMENT 中加入 MOVE 选项。

    重要说明重要提示

    在不影响会话的情况下,在镜像会话过程中添加文件要求该文件路径同时存在于两个服务器上。因此,如果在创建镜像数据库时移动了数据库文件,则随后在镜像数据库上的添加文件操作可能会失败,并可能会导致镜像挂起。有关如何处理失败的创建文件操作的信息,请参阅数据库镜像部署故障排除

    有关详细信息,请参阅 RESTORE (Transact-SQL)RESTORE 参数 (Transact-SQL)

  7. 通常,在主体数据库中必须进行至少一次日志备份,然后将该备份复制到镜像服务器上并在镜像数据库中还原(使用 WITH NORECOVERY)。但是,如果数据库刚刚创建而尚未进行日志备份,或者如果恢复模式刚刚从 SIMPLE 更改为 FULL,则不必进行日志备份。

    为了将日志备份应用到镜像数据库,可以在镜像服务器上使用 SQL Server 或 Transact-SQL:

  8. 在执行完必要的日志备份之后,如果对主体数据库进行了任何其他日志备份,则还必须将这些备份复制到镜像服务器上并将每个日志备份都应用到镜像数据库,以最早的备份开始进行,并始终使用 WITH NORECOVERY。

安全说明安全说明

备份数据库时,TRUSTWORTHY 设置为 OFF。因此,在新的镜像数据库中,TRUSTWORTHY 始终为 OFF。如果数据库在故障转移之后需要得到信任,则必须执行其他设置步骤。有关详细信息,请参阅如何将镜像数据库设置为使用 Trustworthy 属性

重要说明重要提示

如果数据库镜像停止,则必须将对主体数据库执行的所有后续日志备份都应用到镜像数据库,然后才可以重新启动镜像。

示例

必须先创建镜像数据库,才能启动数据库镜像会话。应该在启动镜像会话之前执行此操作。

此示例使用了 AdventureWorks2008R2 示例数据库,默认情况下,该数据库使用简单恢复模式。

  1. 若要对 AdventureWorks2008R2 数据库使用数据库镜像,请改用完整恢复模式:

    USE master;
    GO
    ALTER DATABASE AdventureWorks2008R2 
    SET RECOVERY FULL;
    GO
    
  2. 将数据库的恢复模式从 SIMPLE 更改为 FULL 之后,创建一个完整备份,以用于创建镜像数据库。由于恢复模式已更改,因此指定了 WITH FORMAT 选项来创建新的介质集。这对区分完整恢复模式下的备份与以前在简单恢复模式下创建的备份非常有用。为了实现此示例的目的,在数据库所在的驱动器上创建备份文件 (C:\AdventureWorks2008R2.bak)。

    注意注意

    对于生产数据库,应始终备份到单独的设备。

    在 PARTNERHOST1 的主体服务器实例上,创建主体数据库的完整备份,如下所示:

    BACKUP DATABASE AdventureWorks2008R2 
        TO DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FORMAT
    GO
    
  3. 将完整备份复制到镜像服务器。

  4. 使用 WITH NORECOVERY 将完整备份还原到镜像服务器实例。还原命令取决于主体数据库与镜像数据库的路径是否相同。

    • 如果路径相同:

      在 PARTNERHOST5 的镜像服务器实例上,还原完整备份,如下所示:

      RESTORE DATABASE AdventureWorks2008R2 
          FROM DISK = 'C:\AdventureWorks2008R2.bak' 
          WITH NORECOVERY
      GO
      
    • 如果路径不同:

      如果镜像数据库的路径与主体数据库的路径不同(例如,它们所在的驱动器号不同),则创建镜像数据库要求还原操作包含 MOVE 子句。

      重要说明重要提示

      如果主体数据库与镜像数据库的路径名称不同,则无法添加文件。原因是在接收添加文件操作所需的日志时,镜像服务器实例尝试将新文件放置在主体数据库所在的位置。

      例如,以下命令将位于 C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\ 的主体数据库备份还原到镜像数据库所在的另一个位置 D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\。

      RESTORE DATABASE AdventureWorks2008R2
         FROM DISK='C:\AdventureWorks2008R2.bak'
         WITH NORECOVERY, 
            MOVE 'AdventureWorks2008R2_Data' TO 
               'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\AdventureWorks2008R2_Data.mdf', 
            MOVE 'AdventureWorks2008R2_Log' TO
               'D:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\AdventureWorks2008R2_Log.ldf';
      GO
      
  5. 创建完整备份之后,必须在主体数据库中创建日志备份。例如,下面的 Transact-SQL 语句将日志备份到先前的完整备份所使用的文件中:

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

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

    RESTORE LOG AdventureWorks2008R2 
        FROM DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FILE=1, NORECOVERY
    GO
    
  7. 如果在开始镜像之前进行任何其他日志备份,则还必须使用 WITH NORECOVERY 按顺序将所有这些日志备份还原到镜像服务器上。

    例如,以下 Transact-SQL 语句还原 C:\AdventureWorks2008R2.bak 中的其他两个日志:

    RESTORE LOG AdventureWorks2008R2 
        FROM DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FILE=2, NORECOVERY
    GO
    RESTORE LOG AdventureWorks2008R2 
        FROM DISK = 'C:\AdventureWorks2008R2.bak' 
        WITH FILE=3, NORECOVERY
    GO
    

有关设置数据库镜像、显示安全设置、准备镜像数据库、设置伙伴以及添加见证服务器的完整示例,请参阅设置数据库镜像