分散トランザクションを使用して、ローカル データベースのテーブルを、地球の反対側にあるデータベースのテーブルのデータと同期しています。ネットワークは、インターネット経由で vpn 経由で接続されています。ほとんどの場合は正常に動作しますが、アクティブなトランザクション中に接続が中断されると、ロックによってジョブの再実行が妨げられます。ロックセッションを強制終了できません。そうしようとすると、「ORA-00031: 強制終了のマークが付けられたセッション」が返されるだけで、ローカル データベースを循環する前に実際には強制終了されません。
同期ジョブは基本的に
CURSOR TRANS_CURSOR IS
SELECT COL_A, COL_B, COL_C
FROM REMOTE_MASTERTABLE@MY_LINK
WHERE UPDATED IS NULL;
BEGIN
FOR TRANS IN TRANS_CURSOR LOOP
INSERT INTO LOCAL_MASTERTABLE
(COL_A, COL_B, COL_C)
VALUES
(TRANS.COL_A, TRANS.COL_B, TRANS.COL_C);
INSERT INTO LOCAL_DETAILSTABLE (COL_A, COL_D, COL_E)
SELECT COL_A, COL_D, COL_E
FROM REMOTE_DETAILSTABLE@MY_LINK
WHERE COL_A = TRANS.COL_A;
UPDATE REMOTE_MASTERTABLE@MY_LINK SET UPDATED = 1 WHERE COL_A = TRANS.COL_A;
END LOOP;
END;
この同期操作をネットワーク ドロップアウトに対してより寛容にするためのアイデアをいただければ幸いです。Oracle Standard Edition One を使用しているため、エンタープライズ機能は利用できません。
TIA ソーレン