3

在 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,数据无效或任何其他原因而在某些时候失败。我猜异常指向那条线是因为它是第一个,而不是因为它实际上在那里失败了,但我不确定真正的异常。

有没有机会我可以获得真正的异常以便我可以处理它?

4

1 回答 1

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;

如果无论如何断开连接,您应该与您的网络人员交谈。也许他们通过防火墙设置断开连接。但是,可能还有许多其他原因。

于 2017-12-27T11:25:04.287 回答