使用数据库镜像

注释

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

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 重新加入镜像会话后,它将成为镜像服务器,而其数据库将成为镜像数据库。

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

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

注释

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

编程注意事项

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

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

注释

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

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

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

SQL Server Native Client OLE DB 访问接口

SQL Server Native Client OLE DB 访问接口支持通过连接和连接字符串属性进行数据库镜像。 SSPROP_INIT_FAILOVERPARTNER属性已添加到DBPROPSET_SQLSERVERDBINIT属性集, 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 驱动程序管理器已得到增强,以支持故障转移服务器名称的规范。

另请参阅

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