如果连接丢失,从SQL Server到Oracle服务器的OpenQuery会无限期挂起。

3
我有一个定期在 SQL Server 2005 数据库上运行的作业。它运行一个存储过程,该过程从一个视图中导入数据。这个视图包含了到一个联接 Oracle 服务器的 OPENQUERY
我无法控制 Oracle 服务器 - 它与 Sql Server 安装在地理和虚拟上都是分离的。这个视图只有只读访问权限,我每 30 分钟从中获取数据。
偶尔,与联接的服务器的连接会断开、挂起或变得无响应。当这种情况发生时,SQL Server 上的作业也会挂起,无限期地等待连接返回。在这种情况下,作业既不会失败也不会完成,而第一次知道这件事是用户抱怨缺少数据时。
如果存在连接问题,则查询同一服务器上的数据库会预期地失败 - 仅当使用联接 Oracle 服务器上的 OPENQUERY 时,它才会失去对连接的“感知”。
是否有一种方法可以使作业意识到已经断开与联接服务器的连接并相应地失败?还是我必须创建第二个作业来检查第一个作业是否已经挂起?

这可能是一个适合在serverfault.com上提问的问题吗? - O. Jones
1个回答

0
我们在长时间运行操作时遇到了类似的问题。操作会启动(并且也完成了工作),但调用从未返回。最终,我们能够追踪到这是由于防火墙关闭了与Oracle服务器的连接。
我们可以通过在服务器上使用参数SQLNET.EXPIRE_TIME来防止这种情况发生,该参数会定期“ping”客户端,从而使防火墙不会关闭端口。也许这对您的情况有所帮助。

你说得对,这听起来确实可以解决问题!不幸的是,这似乎是一个Oracle设置(我是对的吗?),这意味着我们无权修改它(它处在不同的国家、不同的法律实体等等)。如果有类似的针对SQL Server让它继续与Oracle“交流”的功能,那么我们可能就能运作了! - Widor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接