昨日、弊社テスト環境で発生したOracle DBのアーカイブログ関連のエラー対処法を投稿いたしましたが、
その後、今度は別の内容のエラーが出力され停止しました。その際の対処法について書き記します。
以下の文が出力されたエラー内容です。
このエラー内容が意味するところは、アーカイブログ出力先として指定されているフラッシュリカバリ領域の容量がいっぱいになっており、新たなアーカイブログが書き込めないというものです。
対処法としては、基本的には、フラッシュリカバリ領域の容量を増やすか不要なアーカイブログファイルを削除するということになりますが、今回調べたところ、「空きを確保するためにアーカイブログをエクスプローラー上で手動ですでに削除してある」とのことでした。
そこでOracle DBの仕様を確認したところ、「アーカイブログの削除にはOracle DBのコマンドを使わなければならず、エクスプローラー上でアーカイブログを削除しても、Oracle DBはそれを認識しない(=領域を開放しない)」という仕様でした。
そのため、あいているはずのスペースが開放されず、結果としていっぱいになってしまった、ということになります。
このような場合、削除されたアーカイブREDOログファイルがすでに存在しないことをOracle DBに認識させる必要があります。
以下がそのコマンドです。
=============
ステップ1:Windowsのコマンドプロンプト(cmd.exe)を開きます。
ステップ2:「RMAN TARGET /」と入力します。
(場合によっては「RMAN TARGET system/password」と打たなければならないかもしれません)
リカバリマネージャに接続します。IDのsystemとパスワードのpasswordの部分は設定に応じて適宜変更してください。
ステップ3:「CROSSCHECK ARCHIVELOG ALL;」と入力します
Oracleがアーカイブファイルの存在を確認しにいきます。
コマンドライン上に進行状況が記録され、すでに存在しないファイルに関してはその旨が表示されます。
ステップ4:「DELETE EXPIRED ARCHIVELOG ALL;」と入力します
Oracleはすでに存在しないアーカイブファイルの情報を削除します。
ステップ5:これで領域が開放されます。これにて作業は完了です。
=============
Oracle DBから行うアーカイブログファイルの削除手順は以下のとおりです。
ステップ1:Windowsのコマンドプロンプト(cmd.exe)を開きます。
ステップ2:「RMAN TARGET /」と入力します。
ステップ3:「DELETE ARCHIVELOG ALL COMPLETED BEFORE ‘sysdate-7’;」と入力します。
BEFORE句は条件式です。上記の例は直近1週間分を残しそれ以前のアーカイブログは削除するというコマンドです。
条件に合わないアーカイブログの削除が実行されます。
ステップ4:「LIST ARCHIVELOG ALL;」と入力します。
条件に沿ったアーカイブログが残っているかを確かめます。
関連したトピックス
- Oracle DB起動時にエラーORA-01034・ORA-27101が出て起動しない際の対処法
- Oracleアーカイブログモードの変更
- 2/21開催Webセミナー「 Veeam新機能 徹底解説 Part 1:Oracle RMAN連携 ~運用変えずVeeamでらくらくバックアップ&リストア~」
- Veeam AgentとPlug-in for Oracle RMANを活用して物理Oracleサーバのバックアップを
- [DBMoto]Oracle順序オブジェクト(シーケンス)のレプリケーションをスクリプトで実現
- 多様な変更追跡で様々環境、要件に対応、Oracleトランザクションセットアップ[Syniti Data Replication]
- APIからレプリケーション結果の検証やデータ整合を実行するサンプルスクリプト[C#] [Syniti DR (DBMoto)]
- WindowsのOracleでORA-01031エラーが発生した場合の対処法
- DBMotoレプリケーションに必要なSQL Serverユーザ権限
- OracleでのNOLOGGING運用によるDBMotoレプリケーションへの影響