det*_*o84 5 sql oracle exception database-link
在 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
Run Code Online (Sandbox Code Playgroud)
第 710 行是过程的第一行:
execute immediate 'set constraints all deferred';
Run Code Online (Sandbox Code Playgroud)
然后该过程执行一些插入和更新,我猜由于 PK、数据无效或任何其他原因,这些操作在某些时候会失败。我猜想异常指向该行是因为它是第一行,而不是因为它实际上在那里失败,但我不确定真正的异常。
我是否有机会获得真正的异常,以便我可以处理它?
一个潜在的解决方法可能是在每次使用 PL/SQL 过程后关闭 DB-Link,如下所示:
FOR aLink IN (SELECT * FROM V$DBLINK) LOOP
DBMS_SESSION.CLOSE_DATABASE_LINK(aLink.DB_LINK);
END LOOP;
Run Code Online (Sandbox Code Playgroud)
或者
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;
Run Code Online (Sandbox Code Playgroud)
如果连接无论如何都断开了,您应该与网络人员联系。也许他们通过防火墙设置断开连接。然而,可能还有很多其他原因。
归档时间: |
|
查看次数: |
40737 次 |
最近记录: |