数据库镜像和数据库快照 (SQL Server)

可以利用为了可用性目的而维护的镜像数据库来卸载报告。 若要使用镜像数据库进行报告,可以在镜像数据库上创建数据库快照,并将客户端连接请求定向到最新的快照。 数据库快照是源数据库在创建快照时存在的一个静态、只读、事务一致性快照。 若要在镜像数据库上创建数据库快照,数据库必须处于同步镜像状态。

与镜像数据库本身不同,客户端可以访问数据库快照。 只要镜像服务器与主体服务器通信,就可以将报告客户端定向到快照。 请注意,由于数据库快照是静态的,因此新数据不可用。 若要向用户提供相对较新的数据,必须定期创建新的数据库快照,并让应用程序直接连接到最新的快照。

新的数据库快照几乎是空的,但它会随着越来越多的数据库页面首次更新而逐渐增长。 由于数据库上的每个快照以这种方式增量增长,因此每个数据库快照消耗的资源与普通数据库一样多。 根据镜像服务器和主体服务器的配置,在镜像数据库中具有过多的数据库快照可能会降低主体数据库的性能。 因此,建议仅在镜像数据库上保留几个相对最近的快照。 通常,在创建替换快照后,应将传入查询重定向到新快照,并在任何当前查询完成后删除以前的快照。

注释

有关数据库快照的详细信息,请参阅数据库快照 (SQL Server)

如果发生角色切换,数据库及其快照将重新启动,暂时断开用户的连接。 之后,数据库快照将保留在创建它们的服务器实例上,该实例已成为新的主体数据库。 用户可以在故障转移后继续使用快照。 但是,这会在新主体服务器上增加负载。 如果环境中出现性能问题,建议在新的镜像数据库上创建快照(如果可用),将客户端重定向到新快照,并从以前的镜像数据库中删除所有数据库快照。

注释

对于横向扩展良好的专用报告解决方案,请考虑复制。 有关详细信息,请参阅 SQL Server 复制

示例:

此示例在镜像数据库上创建快照。

假设数据库镜像会话的数据库为 AdventureWorks2012。 此示例在位于F驱动器上的数据库的镜像副本AdventureWorks上创建三个数据库快照。 快照命名AdventureWorks_0600AdventureWorks_1200AdventureWorks_1800标识其近似创建时间。

  1. AdventureWorks2012 镜像上创建第一个数据库快照。

    CREATE DATABASE AdventureWorks_0600  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_0600.SNP')  
       AS SNAPSHOT OF AdventureWorks2012  
    
  2. AdventureWorks2012 的镜像上创建第二个数据库快照。 仍在使用 AdventureWorks_0600 的用户可以继续使用它。

    CREATE DATABASE AdventureWorks_1200  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_1200.SNP')  
       AS SNAPSHOT OF AdventureWorks2012  
    

    此时,新的客户端连接可以通过编程方式定向到最新的快照。

  3. 在镜像 AdventureWorks2012 上创建第三个快照。 仍在使用 AdventureWorks_0600AdventureWorks_1200 的用户可以继续使用它们。

    CREATE DATABASE AdventureWorks_1800  
    ON (NAME = 'datafile', FILENAME = 'F:\AdventureWorks_1800.SNP')  
        AS SNAPSHOT OF AdventureWorks2012  
    

    此时,新的客户端连接可以通过编程方式定向到最新的快照。

相关任务

另请参阅

数据库快照 (SQL Server)
将客户端连接到数据库镜像会话 (SQL Server)