運用時に発生するエラー

ORA-00257: アーカイブ・エラーです。解除されるまで内部接続のみにしてください。

REDOログ を アーカイブログに書き出せないために停止した状態。

原因

一般的には DISKFULL でアーカイブが行えない場合に発生する。
稀に 手動アーカイブモードの状態を忘れて放置した場合にも発生する。

対応

アーカイブ先のディスクの空き容量を確保する、不要なアーカイブログを削除する。(念のため直近のアーカイブファイルには手を出さないこと)
手動アーカイブ状態になっている場合は、自動アーカイブモードにするか、コマンドでアーカイブする。
以下の手順、参照

アーカイブ先の確認

SQL> ARCHIVE LOG LIST

アーカイブ先のディスクが一杯なら不要なファイルを削除する。

アーカイブ先が USE_DB_RECOVERY_FILE_DEST の場合には DB_RECOVERY_FILE_DEST 初期化パラメータと DB_RECOVERY_FILE_DEST_SIZE による制限を受ける Oracle 10g
その上限値を超えるとサーバーのコンソール(Windows ならイベントビューア)に以下のエラーメッセージが出力される。

  • デフォルトアーカイブ先は $ORACLE_BASE/flash_recovery_area/<SID>/archive/
ORA-16014: ログ x、順序番号 y がアーカイブされていません。使用可能な宛先がありません。
ORA-16038: ログ x 、順序番号 y をアーカイブできません。
ORA-19809: リカバリ・ファイルの制限を超えています

なおリカバリ領域の使用率は Oracle 内部で管理されているので OS から物理的ファイルを移動しても効果がない。 ダウンタイムは短くしたいはずなので、現在値を確認して初期化パラメータを変更する。あとで RMAN を使用してファイルを論理、物理的に削除する。(今のところ RMAN でしか論理が削除できない : 10g) 即時反映する初期化パラメータであるので、停止状態から直ぐに回復することができる。

SQL> SHOW PARAMETER db_recovery_file_dest
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
SQL> ALTER SYSTEM SET db_recovery_file_dest_size='n{K|M|G}' SCOPE=BOTH;

参考: アーカイブログ モード運用への移行

手動アーカイブ モードの確認

SQL> SELECT LOG_MODE FROM V$DATABASE ;

ARCHIVELOG | MANUAL | NOARCHIVELOG
MANUAL 状態だと 手動でアーカイブするモードになっている。
( 注意 ARCHIVE LOG LIST での'自動アーカイブ' の有効/無効の表示は、現状をあらわすものではなく、 可能/不可能を表示しているので自動になっていると限らない (Oracle 10g 時点))

ALTER SYSTEM ARCHIVE LOG ALL ;

にて手動でアーカイブし、アーカイブログ モード運用へ正しく移行する。

 


関連事項

一覧ページへ戻る

OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー