首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当试图连接到SQLDriverConnect时,Failover_Partner失败

当试图连接到SQLDriverConnect时,Failover_Partner失败
EN

Database Administration用户
提问于 2014-08-27 18:40:35
回答 1查看 1.4K关注 0票数 2

当试图连接到SQLDriverConnect时,Failover_Partner失败。

正在使用的连接字符串:

代码语言:javascript
复制
Driver={SQL Native Client};Failover_Partner=tcp:dby;Server=tcp:dbx;
    Database=DB;Uid=user;Pwd=Pwd;Connect Timeout=300;Pooling=false

当我们对dbx上的数据库进行故障转移时,下一次操作将执行SQLError(),这将提供以下信息:

代码语言:javascript
复制
SqlState:  08S01
NativeError: 10054
MessageText: “TCP Provider: An existing connection was forcibly closed by
    the remote host."

此时,我们断开连接,然后关闭该连接的所有打开句柄。

然后使用相同的连接字符串调用SQLDriverConnect。当我们只有一个打开连接时,这个调用就成功了。当我们有多个打开的连接时,我们会收到以下错误:

代码语言:javascript
复制
[Microsoft][SQL Native Client][SQL Server]Login failed for user 'user'.

dbx服务器上,错误日志显示:

代码语言:javascript
复制
Logon   Error: 18456, Severity: 14, State: 38.
Logon   Login failed for user 'XSUser'. Reason: Failed to open the explicitly 
    specified database. [CLIENT: 54.164.196.67]  

dby服务器上没有新的日志。

当我们只使用一个打开的连接运行时,故障转移可以正常工作。只有当存在多个开放连接时,我们才会遇到问题。

当我们启动dbx失败时,我们使用提供的连接字符串成功地连接到所有连接上的dby。此时,当我们连接到dby并且可以通过dby失败时,所有连接都成功地连接到dbx

我们怀疑连接池可能有问题。然而,我相信我们已经成功地禁用了连接池:

代码语言:javascript
复制
SQLINTEGER pooling;
DBCRESULT rc = SQLGetEnvAttr(m_henv, SQL_ATTR_CONNECTION_POOLING , 
    &pooling, 0, NULL);

rc is 0, pooling is 0.

如能就如何开展工作提出任何建议,将不胜感激。

编辑:

我的测试过程是让应用程序连接和查询一些数据。然后,由于应用程序的连接仍然处于打开状态,请在主服务器上手动使用Management来对数据库进行故障转移。然后在镜像服务器上使用Management运行与成功的应用程序相同的选择stmt。此时,我发布应用程序以执行SELECT。对SQLExecDirect的调用失败,然后调用SQLDriverConnect,后者也会失败。自从Management中的SELECT成功之后,我本以为对SQLDriverConnect的调用会成功。

EN

回答 1

Database Administration用户

发布于 2014-08-27 19:00:29

当数据库镜像转到镜像机器时,服务器将在数据库上运行启动代码,包括恢复步骤,以确保数据库中事务的一致性。这个过程可能需要一段时间,可能在10到20秒左右。

您需要等待dby上的数据库联机。我建议重新尝试连接几次,中间等待一两秒钟。

不要禁用连接池,这只会导致性能问题,并且与数据库镜像无关。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/75132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档