Oracleデータベースには、データベース・リンクを介してあるDBから別のDBにデータをコピーする、大きなPL/SQLプロシージャが定期的に実行されています。次のエラーといくつかの時間:ORA-03150:データベース・リンク用通信チャネルのファイルの末尾
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、データが有効でないか、または他の理由であれ。私は、例外が実際にそこに失敗しているわけではなく、最初のものであるため、その行を指していると思いますが、実際の例外は確実にわかりません。
実際の例外が発生する可能性はありますか?
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;
接続がとにかく破棄された場合:
INSERTが失敗するよりも、少しフレークなネットワークがある可能性が高くなります。 INSERTが失敗した場合は、それに関連したエラーがまだ残っています(これをテストすることはできません)。 – Ben
これは分散トランザクションなので、最初のステップは 'alert.log' **リモートサーバー**で。これは、トランザクションが失敗した理由を理解するのに十分な情報を提供するはずです。 – APC
は、私達はちょうどALERT.LOG詳細を受け、我々はなっている: 'TNS-12535を:TNS:505 TNS-00505:12560 がメインERRコードをNT:操作が NS二次ERRコードをタイムアウトになった操作は をタイムアウトしましたローカルのDBに0 0 2番目のエラーコード:110 nt OSエラーコード:0、リモートサーバーのalert.logには何もありません。だから我々はそれがローカル手続きの中の何かであると考える傾向がある。 2時間後のタイムアウトは普通だと思います。 – detoro84