在 SQL Server Native Client 中使用数据库镜像

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

注意

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

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中删除SQL Server Native Client(通常缩写为 SNAC)。 不建议在新应用程序开发工作中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 请在此后切换为使用新版 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新版的 Microsoft OLE DB Driver for SQL Server。 对于作为 SQL Server 数据库引擎组件(版本 2012 到 2019)随附的 SQLNCLI,请参阅此支持生命周期特例

在 SQL Server 2005 (9.x) 中引入的数据库镜像是一种提高数据库可用性和改善数据冗余性的解决方案。 SQL Server Native Client 为数据库镜像提供隐式支持,因此在为数据库配置代码后,开发人员无需编写任何代码或采取任何其他操作。

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

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

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

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

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

注意

有关与镜像数据库之间的初始连接尝试和重新连接尝试的信息,请参阅将客户端连接到数据库镜像会话 (SQL Server)

编程注意事项

当主体数据库服务器失败时,客户端应用程序则接收错误以响应 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 的新连接字符串属性。 有关详细信息,请参阅将 连接ion String 关键字与 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属性以用于 SQLSet连接Attr 和 SQLGet连接Attr 函数;Failover_Partner 关键字 (keyword)已添加为新的连接字符串属性。

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

注意

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

另请参阅

SQL Server Native Client 功能
将客户端连接到数据库镜像会话 (SQL Server)
数据库镜像 (SQL Server)