在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,数据无效或任何其他原因在某些时候失败。我想这个例外是指向那条线,因为它是第一条,不是因为它实际上在那里失败了,但我不确定真正的异常。
我有没有机会得到真正的异常所以我可以处理它?</ p>
答案 0 :(得分:0)
一个潜在的解决方法可能是在使用这样的PL / SQL过程每次之后关闭DB-Link:
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;
如果连接丢失了,你应该和网络人员交谈。也许他们通过防火墙设置放弃连接。但是,可能还有很多其他原因。