13.7 客户端连接到数据库镜像

13.7  客户端连接到数据库镜像


13.7.1 连接字符串

  为了使用 TCP/IP 显式连接到 SQLSVR1 或 SQLSVR2 上的 SQLDB01 数据库,使用 SQL Server Native Client 驱动程序的客户端应用程序可能会提供以下连接字符串:


Server=SQLSVR1; Failover_Partner=SQLSVR2; Database=SQLDB01;


  如果已建立的到主体数据库的连接因某种原因(例如,由于数据库镜像故障转移)而失败,则数据访问接口可以尝试使用故障转移伙伴名称进行重新连接。但是,重新连接不是自动进行的, 应用程序必须能够识别错误。然后,应用程序需要关闭失败的连接并使用相同的连接字符串属性打开新连接。此时,数据访问接口将连接重定向到故障转移伙伴。


13.7.2 连接重试算法

  不论是初次与会议建立连接,还是中断已建立连接后重新连接,数据访问接口都遵循连接重试算法。打开连接之后,还需要一些时间完成登录的步骤。

  默认的登录超时期限为15秒,建议登录超时期限至少为5秒。如果指定较短的超时期限,则可能导致连接尝试失败。

  当初始伙伴名称和故障转移伙伴名称均可用时,客户端会交替使用这两个名称,反复尝试重新连接到服务器。

  在第一轮连接尝试中,数据访问接口将首先尝试使用初始伙伴名称,如果连接尝试失败(或者重试时间过期)且未超过登录期限,则数据访问接口还会尝试使故障转移伙伴名称。如果连接尝试仍然失败,则进行第二轮连接尝试,还是首先尝试使用初始伙伴名称,如果尝试失败(且未超过登录期限)则使用故障转移伙伴名称。如此反复,直到登录期限超时。

  第一轮每次重试时间为总登录时间的 8%;后续每轮依次递增 8%。以15秒的登录超时期限为例,前 4 轮中分配的重试时间如下:

轮次 比例 每次尝试重试的时间
1 8 % 1.2 秒
2 16 % 2.4 秒
3 24 % 3.6 秒
4 32 % 4.8 秒

 

  下图说明了15秒时的重试时间。

wKiom1Vv8faQJ95EAAFMsehyncE813.jpg


在上例中,前三轮连接尝试耗时 14.4 秒,在登录期限超时之前仅剩下 0.6 秒的时间。在这种情况下,第4轮仅允许使用初始伙伴名称进行最后的快速连接尝试。



13.7.3 故障转移期间的重试延迟时间

  如果客户端尝试连接到正在进行故障转移的伙伴,则此伙伴会立即做出响应,表明它处于不活动的状态。在这种情况下,每轮连接尝试都会比分配的重试时间更短暂,从而导致在登录期限超时之前会发生多轮连接尝试,这会增加伙伴在故障转移期间的负载。因此,这种情况下,数据访问接口将在每轮尝试之后增加短暂的重试延迟时间。

  在第一轮之后,延迟时间为 100 毫秒。在接下来的3轮之后,重试延迟时间加倍,分别达到 200、400和800毫秒。由于最大的重试延时时间为1秒,因此第5轮及所有的后续轮次,重试延迟时间为1秒,直到连接尝试成功或超时。

  下图说明了在手动故障转移期间重试延迟时间对连接尝试的影响。登录超时期限为15秒。

wKiom1Vv-JaxLZ2GAAFZqxs1XIo311.jpg



13.7.4 驱动程序支持

  客户端安装的驱动程序必须支持数据库镜像以及故障转移,否则,连接到数据库镜像会话伙伴时会报错。

  例如,在 Linux 服务器上使用 UNIXODBC2.3.0 将客户端连接到 SQL Server 镜像数据库,会出现以下报错:

client=n/a (n/a) unixODBC-2.3.0 64-bit /ab/home/misc/64/unixODBC/lib/libodbc.so

ABINITIO(DB00001): Failed connecting to the database <ALGO_PROD>.

ABINITIO(DB00001):

ABINITIO(DB16000): ODBC Error

ABINITIO(DB16000): SQLCODE: 20020

ABINITIO(DB16000): SQLSTATE: 08S01

ABINITIO(DB16000): MESSAGE: [unixODBC][FreeTDS][SQL Server]Bad token from the server: Datastream processing out of sync

ABINITIO(DB16000): ODBC Error

ABINITIO(DB16000): SQLCODE: 0

ABINITIO(DB16000): SQLSTATE: 08001

ABINITIO(DB16000): MESSAGE: [unixODBC][FreeTDS][SQL Server]Unable to connect to data source

ABINITIO(DB00067): Current DB Environment:

ABINITIO(DB00067):

ABINITIO(*): Database Package Version 3-1-6-4-e11-1


  在微软官方文档中有明确指出 Microsoft ODBC Driver 11 for SQL Server on Linux 不支持数据库镜像。这个 UNIXODBC2.3.0 也不支持 SQL Server 数据库镜像。建议通过使用 JDBC driver 在 Linux 服务器上连接使用了镜像的 SQL Server 数据库。



13.7.5 访问镜像数据库

  镜像数据库的状态一直都处于“正在还原”,因此不可以访问。

  可以为镜像数据库创建一个数据库快照,然后通过这个数据库快照实现只读访问。



本文出自 “SQL Server 管理员指南” 博客,谢绝转载!

你可能感兴趣的:(镜像)