编辑/前言: 该问题已从SO迁移过来,因为我对DB链接查询超时问题特别感兴趣。SO所提供的解决方法是可以的,但是我对这个问题本身很感兴趣。
动机:
我有一个查询“永远”运行(超过2天,直到终止会话),它使用数据库链接。问题似乎是远程数据库变得不可用,并且由于某些未知原因ORA-02068
(没有在这里讨论)而没有提出(查询在此等待)。
(该查询是由dbms_scheduler作业发出的,该作业在PL / SQL程序包中执行一个过程。因此,该作业也被卡住了。但这对于此问题的核心没有特别的兴趣)
我已经通过将我的一个测试数据库置于静默模式并通过数据库链接对其进行查询来模拟这种情况。如预期的那样,查询一直在等待,直到手动取消或取消取消远程DB。
问题:
我无法控制远程数据库的行为和正常运行时间,因此我正在寻找某种可能性来设置使用数据库链接的查询的超时时间。
我已经研究过配置文件(CPU_PER_CALL
等),sqlnet.ora
参数,将本地命名参数直接添加到连接字符串中(例如添加(connect_timeout=10)
到数据库链接定义中),使用运行命令... for update wait 1
,但是它们对于繁忙或空闲会话均有效,但不适用于等待中的会话。
因此,我正在数据库链接的“本地”侧搜索某些选项,该选项为通过数据库链接的查询设置超时。由于我对这些特定的DB没有DBA权限,因此
喜欢alter session set xyz
或喜欢一些解决方案select ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)
。
我目前使用的是10gR2,但将在几周内升级到11gR2,因此使用这些版本中的任何一个都将很有用。