アーカイブログの削除方法まとめ(ORA-00257対処方法)
データベースをアーカイブログモードで運用した場合、ログスイッチのタイミングでARCHプロセスがREDOログファイルのコピーをアーカイブREDOログファイル(アーカイブログ)として保存します。
アーカイブログは一般的に世代管理/N日分を保存といったポリシーを設定し、バックアップ取得時に削除する運用をされているケースが多く見られます。
しかし、「繁忙期で更新処理が大量に行われ想定以上のアーカイブログが出力された」、「バックアップジョブが何かしらの理由により動作していなかった」といった理由でアーカイブログの出力先空き容量が枯渇すると「ORA-00257:アーカイブ・エラーです。解除されるまでAS SYSDBAにのみ接続してください。」などのエラーが発生し一般ユーザでの新規接続ができない/既存の更新処理がハングするといった状態になります。
今回はアーカイブログの出力先領域を増やす緊急手段として、アーカイブログの削除方法を3つ紹介します。
【事前確認】アラートログから対象領域(ディスク名/ディスクグループ名)を確認
アーカイブログの出力先が枯渇している場合、対象データベースのアラートログにはアーカイブログが作成できないことを示すエラーを出力します。どのディスクに対して出力ができないのかはエラーメッセージから確認可能です。
Unable to create archive log file '+data'
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_arc2_24884.trc:
ORA-19816: WARNING: Files may exist in db_recovery_file_dest that are not known to database.
ORA-17502: ksfdcre:4 Failed to create file +data
ORA-15041: diskgroup "DATA" space exhausted
*************************************************************
WARNING: A file of type ARCHIVED LOG may exist in
db_recovery_file_dest that is not known to the database.
Use the RMAN command CATALOG RECOVERY AREA to re-catalog
any such files. If files cannot be cataloged, then manually
delete them using OS command. This is most likely the
result of a crash during file creation.
*************************************************************
ARC2: Error 19504 Creating archive log file to '+data'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance orcl1 - Archival Error
ORA-16038: log 2 sequence# 47 cannot be archived
ORA-19504: failed to create file ""
ORA-00312: online log 2 thread 1: '+DATA/orcl/onlinelog/group_2.507.964538481'
ORA-00312: online log 2 thread 1: '+DATA/orcl/onlinelog/group_2.354.964538481'
上述の出力例はRAC環境のもので、「diskgroup "DATA" space exhausted」や「Error 19504 Creating archive log file to '+data'」の出力にあるとおり、ディスクグループ'DATA'にアーカイブログが作成できないことを示します。
【削除方法1】RMANで削除
DELETE ARCHIVELOG コマンドを使用してアーカイブログを削除します。すべてのアーカイブログを削除する場合は「ALL」、特定日付以前のアーカイブログを削除する場合は「UNTIL TIME」を指定します。
--RMANを起動(ユーザ名、ORACLE_SID、ORACLE_HOMEは環境に合わせて指定)
% su - oracle
% export ORACLE_SID=orcl
% export ORACLE_HOME=/u01/oracle/app/v122/product/12.2.0/dbhome_1
% rman target sys/password
--全て削除
RMAN> DELETE ARCHIVELOG ALL;
--日数指定で削除(例:3日前以前のアーカイブログ)
RMAN> DELETE ARCHIVELOG UNTIL TIME 'sysdate - 3';
なお、削除するアーカイブログの指定方法には「UNTIL SEQUENCE」や「UNTIL SCN」もありますが、事前に listコマンド等で対象となるシーケンス番号やSCNを確認しておく必要があるため、緊急時の対処として利用されるケースは稀です。
補足1:RMAN以外で削除を行った場合
RMAN以外の方法、たとえば、UNIX系であればrm、WindowsであればdelなどのOSコマンドでアーカイブログを削除した場合、アーカイブログの情報は(デフォルトでは)制御ファイル上で保持しているためOracle Databaseはファイルが削除されたことを認識できません。
そのため、OS上では空き領域があるように見えてもORA-00257が解消しないことがあります。
RMAN以外でアーカイブログを削除した場合は、RMANで次のコマンドを実行し、実際のファイルと制御ファイルの情報を同期します。
--RMANを起動(ユーザ名、ORACLE_SID、ORACLE_HOMEは環境に合わせて指定)
% su - oracle
% export ORACLE_SID=orcl
% export ORACLE_HOME=/u01/oracle/app/v122/product/12.2.0/dbhome_1
--制御ファイルとの同期
% rman target sys/password
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
補足2:RMAN> delete archivelog all;で削除されないアーカイブログ
リカバリカタログを使用していない場合、アーカイブログの情報は制御ファイルで保持されます。制御ファイルでのアーカイブログ情報の保証期間は
control_file_record_keep_time
で設定されておりデフォルトでは7日です。そのため、8日以上前のアーカイブログの情報は上書きされる可能性があります。※時間経過後即上書きされるわけではありません。
制御ファイル上で上書きされたアーカイブログは"RMAN> list archivelog all;"に出力されず、"RMAN> delete archivelog all;"でも削除されません。ディスク上にこのようなアーカイブログが存在する場合、ファイルシステムの場合はOSコマンドで削除して問題ありません。
ASMを利用の環境では後述いずれかの方法でASM上から不要なアーカイブログを削除します。
【削除方法2】ALTER DISKGROUPで削除(ASM利用環境)
ASMインスタンスに接続後、ディスクグループ名、ファイル名を確認して削除します。
--DBインスタンスに接続(ユーザ名、ORACLE_SID、ORACLE_HOMEは環境に合わせて指定)
% su - oracle
% export ORACLE_SID=orcl
% export ORACLE_HOME=/u01/oracle/app/v122/product/12.2.0/dbhome_1
% sqlplus / as sysdba
--ファイル名確認
SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
SQL> select completion_time,name from v$archived_log where name is not null;
COMPLETION_TIME NAME
------------------- ----------------------------------------------------------------------
2018/03/12 11:35:49 +DATA/orcl/archivelog/2018_03_12/thread_1_seq_85021.514.970572949
2018/03/12 11:35:49 +DATA/orcl/archivelog/2018_03_12/thread_2_seq_576.528.970572949
--ASMインスタンスに接続(ORACLE_SID、ORACLE_HOMEは環境に合わせて指定)
% su - grid
% export ORACLE_SID=+ASM1
% export ORACLE_HOME=/u01/app/12.2.0/grid
% sqlplus / as sysasm
--削除コマンド
SQL> alter diskgroup DATA drop file '+DATA/orcl/archivelog/2018_03_12/thread_1_seq_85021.514.970572949';
SQL> alter diskgroup DATA drop file '+DATA/orcl/archivelog/2018_03_12/thread_2_seq_576.528.970572949';
--制御ファイルとの同期
% su - oracle
% export ORACLE_SID=orcl
% export ORACLE_HOME=/u01/oracle/app/v122/product/12.2.0/dbhome_1
% rman target sys/password
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
【削除方法3】ASMCMDで削除(ASM利用環境)
ASM内のファイルを管理するコマンドライン・ユーティリティ、ASMCMDを使用します。アーカイブログは日付ごとにディレクトリが分かれているため日数指定での削除も可能です。
--ASMインスタンスに接続(ORACLE_SID、ORACLE_HOMEは環境に合わせて指定)
% su - grid
% export ORACLE_SID=+ASM1
% export ORACLE_HOME=/u01/app/12.2.0/grid
% asmcmd
--アーカイブログ出力先領域に移動(パスはアラートログの出力内容で判断)
ASMCMD> cd DG名/DB名/ARCHIVELOG/
ASMCMD> ls
--纏めて削除する場合
ASMCMD> rm -fr *
--日付毎等で分割して削除する場合
ASMCMD> rm -fr yyyy_mm_dd
--特定のファイルを削除する場合
ASMCMD> cd DG名/DB名/ARCHIVELOG/yyyy_mm_dd
ASMCMD> rm -fr ファイルパス
--制御ファイルとの同期
% su - oracle
% export ORACLE_SID=orcl
% export ORACLE_HOME=/u01/oracle/app/v122/product/12.2.0/dbhome_1
% rman target sys/password
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
まとめ
アーカイブログ出力先領域の枯渇による接続障害のお問合わせは2017年1月1日~12月31日の間で20件以上いただいております。データベースに接続できない=サービスの提供ができない状況ですので、多くのケースで緊急対応のご要望いただいておりました。アーカイブログに限らずディスクフルに起因してトラブルが発生するケースは少なくないため、日頃からディスク領域の監視をすることが重要です。
なお、本記事の内容でアーカイブログを削除した場合はそのアーカイブを用いたリカバリは行えなくなるため、削除後には必ずデータベースのバックアップをご取得ください。
この記事で知りたい情報は得られましたか?
本記事に関連して、Oracle Databaseの障害発生時の対処法や、Oracle Database 21cへのバージョンアップ時の留意点などをご紹介している記事もございます。適宜あわせてお読みください。
Oracle Databaseについてのお問い合わせはこちら
Oracle Databaseのバージョンアップやシステム更改のご相談や技術支援のご要望がございましたら、お気軽にお問い合わせください。
筆者情報
サービス事業部 付加価値創造部
2007年アシスト入社。Oracle Databaseのサポート業務を経て、サポートセンターに蓄積されたナレッジを使用したサービス開発の立ち上げに従事。現在は「アシストの超サポ」を広め、カスタマーエンゲージメントの構築を実現するための活動を行っている。
■本記事の内容について
本記事に記載されている製品およびサービス、定義及び条件は、特段の記載のない限り本記事執筆時点のものであり、予告なく変更になる可能性があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java及びMySQLは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
関連している記事
本記事では、従来のON COMMIT MViewが抱えてきたこのようなスループット低下や待機イベントのボトルネックを振り返りつつ、Oracle AI Database 26aiが提供する「同時リフレッシュ(Concurrent Refresh)」によって、OLTP/DWHそれぞれのユースケースでどのような改善が見込めるのかを検証していきます。
- Oracle Cloud
- Oracle Database
2026.03.25
BaseDBの運用でData Pump用の領域が不足した際、外部ストレージの活用が有効です。本記事では3つのストレージについて1TB利用時のコスト目安や性能、運用負荷を徹底比較します。自社環境に最適な外部ストレージ選びのポイントが分かります。
Oracle Trace File Analyzer(TFA)は、障害時のログ収集を効率化するツールです。複数ログの一括取得や時間指定、シングル環境での導入手順まで、現場目線でわかりやすく解説します。