日期:2014-05-17  浏览次数:20492 次

sql2005链接服务器问题,造成经常物理连接不可用
本帖最后由 zjl8008 于 2013-12-15 17:21:02 编辑
A服务器win2008 64位+ms sql2005企业版sp3
B服务器win2008 32位+ms sql2005企业版sp4
在B服务器上添加了链接服务器连接到A,
然后做了一个接口程序,从A数据库导数据到B数据库
经测试可以正常运行。
问题是启用这个接口程序后,原来访问A库的业务程序经常报错,“物理连接不可用”,A程序是pb开发程序,在程序打开时连接数据库,关闭时断开数据库连接,已排除网络故障。1个小时可能会发生5、6次左右。
而在不使用接口程序时,使用1天也不会出错。
这是什么原因呢?
接口程序中用到了如下命令,不知道有什么关系?
SET ANSI_NULLS ON
SET ANSI_warnings ON
set xact_abort ON
另原来在2台wind2003++ms sql2005企业版sp3,使用时没有发生如上问题,如何解决呢?

------解决方案--------------------
按照代码上来理解,可能你有事务不成功,回滚,但是回滚时间太长,阻塞了,导致数据库超时
------解决方案--------------------
有可能是,B服务器在把数据库A的数据,导入到B服务器时,锁住了表,然后导致原来能正常执行的 pb程序,在执行sql语句,超时了,导致连接断开。
------解决方案--------------------
引用:
和操作系统或数据库的版本、补丁有关系吗?


这个确实有可能,但不好确定
------解决方案--------------------
引用:
和操作系统或数据库的版本、补丁有关系吗?


对了 ,你试过,当你手动执行,把A库的数据,导入到B库的时候,数据量大不,需要多少时间呢
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

和操作系统或数据库的版本、补丁有关系吗?


对了 ,你试过,当你手动执行,把A库的数据,导入到B库的时候,数据量大不,需要多少时间呢

数据量大时5分钟,少时也就10几秒


那很有可能是在数据量大的时候,锁住了数据了,导致pb在操作数据时,超时
------解决方案--------------------
2008和2003的windows有一些不同的配置项,估计这些项影响了,但是从你的描述来说,如果是数据库层面的问题,可能是链接服务器没有配置好,如果不是数据库层面的问题,也可能和数据库有点关系,比如连接池、缓冲池等满了,PH没有很好地控制或者结束会话,导致新的连接创建不了,或者网络不稳定,连接定位有问题,我现在用的某云服务器,里面两台虚拟机,经常镜像会不稳定,目前能够说得过去的就是由于是虚拟网络,导致镜像定位的IP地址不稳定,所以会有挂起的状态。我建议你先看看等待信息:

SELECT TOP 10 * FROM sys.dm_os_waiting_tasks ORDER BY wait_duration_ms DESC 

SELECT TOP 10 * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC
 
把这些结果贴出来分析一下
------解决方案--------------------
还有就是sqlserver的错误日志和windows的应用日志,这部分比较多,可能要你自己找找是否有一些明显的报错