语言
使用SQL Server中的数据库镜像可以在备用服务器上保留SQL Server数据库的副本或镜像。 镜像可确保始终存在数据的两个独立副本,从而提供高可用性和完整的数据冗余。 为SQL Server数据库配置数据库镜像后,Microsoft。Data.SqlClient 支持它,而无需其他客户端代码。 还可以在 ConnectionString 属性中指定故障转移伙伴服务器。
当对象面向为镜像配置的数据库时 SqlConnection ,会发生以下事件序列:
客户端应用程序成功连接到主体数据库,服务器发送回伙伴服务器的名称,然后将它缓存在客户端上。
如果包含主体数据库的服务器发生故障或连接中断,连接和事务状态会丢失。 客户端应用程序尝试重新与主体数据库建立连接,但失败了。
然后,客户端应用程序以透明方式尝试与伙伴服务器上的镜像数据库建立连接。 如果成功,连接会重定向到镜像数据库,然后镜像数据库会成为新的主体数据库。
在连接字符串中指定故障转移合作伙伴
如果你在连接字符串中提供故障转移伙伴服务器的名称,且主体数据库在客户端应用程序首次连接时不可用,那么客户端会以透明方式尝试与故障转移伙伴建立连接。
";Failover Partner=PartnerServerName"
如果省略故障转移伙伴服务器名称,且主体数据库在客户端应用程序首次连接时不可用,提供程序将引发 SqlException。
SqlConnection成功打开后,服务器将返回故障转移伙伴名称。 该名称取代连接字符串中的值。
备注
对于数据库镜像方案,必须在连接字符串中显式指定初始目录或数据库名称。 如果客户端接收没有显式指定初始编录或数据库的连接的故障转移信息,故障转移信息不会缓存,应用程序也不会在主体服务器失败时尝试进行故障转移。 如果连接字符串有故障转移伙伴的值,但没有初始目录或数据库的值,那么 InvalidArgumentException 会抛出。
检索当前服务器名称
故障转移后,使用 DataSource 属性检索连接的服务器名称。 以下代码片段假定连接变量引用的是 SqlConnection 类的一个已打开实例。
发生故障转移事件后,当连接被切换到镜像服务器时,会更新 DataSource 属性以反映镜像名称。
Dim activeServer As String = connection.DataSource
string activeServer = connection.DataSource;
SqlClient 镜像行为
客户端始终尝试连接到当前主体服务器。 如果失败,它会尝试连接到故障转移伙伴。 如果镜像数据库已切换为伙伴服务器上的主体角色,连接会成功,且新的主体镜像映射会发送到客户端,并在调用 AppDomain 的生存期内进行缓存。 它不存储在永久性存储中,不适用于不同 AppDomain 或进程中的后续连接。 但是,它可用于同一AppDomain内的后续连接。 请注意,在同一台或另一台计算机上运行的另一个 AppDomain 或另一个进程始终具有其连接池,并且这些连接不会重置。 在这种情况下,如果主数据库出现故障,每个进程或 AppDomain 会失败一次,而且池会被自动清除。
备注
服务器上的镜像支持是逐个数据库进行配置的。 如果通过使用多部分名称或更改当前数据库对主体/镜像集中没有的其他数据库执行数据操作,对这些其他数据库所做的更改不会在发生故障时传播。 修改未镜像的数据库中的数据不会生成错误。 开发人员必须评估此类操作可能会造成的影响。
数据库镜像资源
有关配置、部署和管理镜像的概念性文档及信息,请参阅 SQL Server 文档中的下列资源。
| 资源 | 说明 |
|---|---|
| 数据库镜像 | 介绍在 SQL Server 中设置和配置镜像的方法。 |