在Oracle数据库中,有一个大型PL/SQL过程定期执行,它通过数据库链接将数据从一个数据库复制到另一个数据库,几个小时后它失败了,出现了以下错误:
ORA-03150: end-of-file on communication channel for database link
ORA-02063: preceding line from DBPREMOTE
ORA-06512: at "DBLOCAL.JOB_NAME", line 710
...
ORA-06512: at line 1
第710行是过程的第一行:
execute immediate 'set constraints all deferred';
然后这个过程会做一些插入和更新,我想这是由于PK、数据无效或其他原因而在某个时候失败的。我想,异常是指向这条线,因为它是第一条,并不是因为它实际上是失败的,但我不确定真正的例外。
我是否有可能得到真正的例外,这样我就能处理好了?
发布于 2017-12-27 11:25:04
一种可能的解决方法是在每次使用之后关闭DB-链接,使用PL/SQL过程如下:
FOR aLink IN (SELECT * FROM V$DBLINK) LOOP
DBMS_SESSION.CLOSE_DATABASE_LINK(aLink.DB_LINK);
END LOOP;
或
DECLARE
DATABASE_LINK_IS_NOT_OPEN EXCEPTION;
PRAGMA EXCEPTION_INIT(DATABASE_LINK_IS_NOT_OPEN, -2081);
BEGIN
DBMS_SESSION.CLOSE_DATABASE_LINK('DBPREMOTE ');
EXCEPTION
WHEN DATABASE_LINK_IS_NOT_OPEN THEN
NULL;
END;
如果连接被取消了,你应该和你的网络伙伴谈谈。也许他们通过防火墙设置取消了连接。然而,可能还有许多其他原因。
https://stackoverflow.com/questions/47989846
复制相似问题