使用数据库镜像

数据库镜像是在 SQL Server 2005 中引入的,是用于提高数据库可用性和数据冗余的主要软件解决方案。SQL Server Native Client 提供对数据库镜像的隐式支持,因此,在针对数据库配置数据库镜像之后,开发人员无需编写任何代码或采取任何其他操作。

数据库镜像是基于每个数据库实现的,它在备用服务器上保留 SQL Server 生产数据库的副本。该服务器根据数据库镜像会话的配置和状态,充当热备用或温备用服务器。热备用服务器支持快速故障转移且不会丢失已提交事务,温备用服务器支持强制服务(可能丢失数据)。

生产数据库称为“主体数据库”,而备用副本称为“镜像数据库”。主体数据库和镜像数据库必须位于单独的 SQL Server 实例(服务器实例)中,并且应位于单独的计算机中(如果可能)。

生产服务器实例称为“主体服务器”,而备用服务器实例称为“镜像服务器”,两个实例相互通信。主体服务器和镜像服务器在数据库镜像“会话”中充当伙伴。如果主体服务器失败,镜像服务器可以通过称为“故障转移”的过程将其数据库转为主体数据库。例如,Partner_A 和 Partner_B 是两个伙伴服务器,主体数据库最初位于作为主体服务器的 Partner_A 中,镜像数据库位于作为镜像服务器的 Partner_B 中。如果 Partner_A 脱机,Partner_B 上的数据库可以进行故障转移,成为当前的主体数据库。当 Partner_A 重新加入镜像会话时,该服务器变为镜像服务器,并且其数据库变为镜像数据库。

备用数据库镜像配置提供不同级别的性能和数据安全,并支持不同形式的故障转移。有关详细信息,请参阅数据库镜像概述

指定镜像数据库名称时可以使用别名。

注意注意

有关与镜像数据库之间的初始连接尝试和重新连接尝试的信息,请参阅连接客户端与镜像数据库

编程时的注意事项

当主体数据库服务器失败时,客户端应用程序则接收错误以响应 API 调用,这指示与数据库之间的连接已丢失。发生此种情况时,对数据库执行的任何未提交的更改将丢失,并回滚当前事务。如果发生这种情况,应用程序应关闭连接(或释放数据源对象),然后再重新打开它。连接将以透明方式重新定向到镜像数据库,该数据库现在充当主体服务器。

建立连接时,主体服务器将其故障转移伙伴的标识发送到客户端,以便在发生故障转移时使用。当应用程序在主体服务器失败后尝试建立连接时,客户端不知道故障转移伙伴的标识。为使客户端能够处理这种情况,初始化属性和关联的连接字符串关键字允许客户端自己指定故障转移伙伴的标识。客户端属性仅在此种情况下使用;如果主体服务器可用,则不使用此属性。如果客户端提供的故障转移伙伴服务器未引用充当故障转移伙伴的服务器,该服务器将拒绝连接。若要使应用程序适应配置更改,可以通过在建立连接后检测该属性来确定实际故障转移伙伴的标识。如果首次尝试建立连接失败,则应考虑缓存伙伴信息,以更新连接字符串或设计重试策略。

注意注意

如果希望在 DSN、连接字符串或连接属性/特性中使用此功能,必须显式指定连接要使用的数据库。否则,SQL Server Native Client 将不会尝试故障转移到伙伴数据库。

镜像是面向数据库的功能。使用多个数据库的应用程序可能无法利用此功能。

此外,服务器名称不区分大小写,而数据库名称区分大小写。因此,应确保在 DSN 和连接字符串中使用相同的大小写。

SQL Server Native Client OLE DB 访问接口

SQL Server Native Client OLE DB 访问接口通过连接和连接字符串属性支持数据库镜像。已向 DBPROPSET_SQLSERVERDBINIT 属性集添加 SSPROP_INIT_FAILOVERPARTNER 属性,FailoverPartner 关键字是 DBPROP_INIT_PROVIDERSTRING 的新连接字符串属性。有关详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client

只要加载访问接口,故障转移缓存就会一直保留,直到调用 CoUninitialize 或应用程序引用由 SQL Server Native Client OLE DB 访问接口管理的某一对象(如数据源对象)为止。

有关 SQL Server Native Client OLE DB 访问接口对数据库镜像的支持的详细信息,请参阅初始化和授权属性

SQL Server Native Client ODBC 驱动程序

SQL Server Native Client ODBC 驱动程序通过连接和连接字符串属性支持数据库镜像。具体而言,添加了 SQL_COPT_SS_FAILOVER_PARTNER 属性,以便与 SQLSetConnectAttrSQLGetConnectAttr 函数配合使用;并添加了 Failover_Partner 关键字作为新的连接字符串属性。

只要应用程序至少分配有一个环境句柄,故障转移缓存就会一直保留。相反,当释放最后一个环境句柄时,将丢失故障转移缓存。

注意注意

ODBC 驱动程序管理器已得以改进,能够支持指定故障转移服务器名称。