レプリケーション時のエラー「ORA-01291: ログ・ファイルがありません」への対処法


Oracleからの差分レプリケーション(ミラーリング)の際に、下記のエラーが発生した場合の原因と対処法です。

●エラー内容:
ORA-01291: ログ・ファイルがありません

●原因:
DBMotoが保持している(最後にレプリケーションした)Redo IDがOracleへ接続参照時に既になくなっている場合に本エラーが発生します。

DBMotoが保持しているRedo IDはDBMotoのレプリケーションプロパティから確認できます。下記画面例では73348299となります。

次にOracleサイドでのRedo IDを確認します。
クエリselect * from v$logにて確認可能です。

上記例のケースでは、SEQUENCE#が693がRedoの一番古いグループです。
このレコードのFIRST_CHANGE#を確認するとIDが75885340となっており、これがその時点での一番古いIDとなります。

DBMoto側でのIDが73348299、Oracleの一番古いIDが75885340ということで、このケースでエラーとなります。

●対処法:

まず既になくなってしまったIDの範囲のレプリケーションを行うことはできませんので、レプリケーションデータを復旧するにはイニシャルリフレッシュを実行する必要があります。

次に、このエラーを発生させないようにするには、DBMotoからOracleへ参照するIDが確実に残っている必要がありますので、下記対応を検討する必要があります。
・Redoログサイズやグループ数を増やして余裕を持たせる
・アーカイブログ運用にする(DBMotoはアーカイブログの参照も可能)

なお、Oracle側にIDが残っているにも関わらず本エラーが発生してしまう場合にはお問い合わせください。

 

関連したトピックス