Database Support Blog

Database Support Blog>アーカイブログの削除方法まとめ(ORA-00257対処方法)

  • Oracle Database
2018.03.22

アーカイブログの削除方法まとめ(ORA-00257対処方法)

アーカイブログの削除方法まとめ(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件以上いただいております。データベースに接続できない=サービスの提供ができない状況ですので、多くのケースで緊急対応のご要望いただいておりました。アーカイブログに限らずディスクフルに起因してトラブルが発生するケースは少なくないため、日頃からディスク領域の監視をすることが重要です。

なお、本記事の内容でアーカイブログを削除した場合はそのアーカイブを用いたリカバリは行えなくなるため、削除後には必ずデータベースのバックアップをご取得ください。

筆者情報

大野 高志

サービス事業部 付加価値創造部

2007年アシスト入社。Oracle Databaseのサポート業務を経て、サポートセンターに蓄積されたナレッジを使用したサービス開発の立ち上げに従事。現在は「 アシストの超サポ 」を広め、カスタマーエンゲージメントの構築を実現するための活動を行っている。


アシスト データベース ウェビナー

関連している記事

  • Oracle Database
2020.08.05

DB事例多数!アシストオンラインフォーラム2020 目的別視聴ガイド

アシストオンラインフォーラム2020では140を超えるセッションをご視聴いただけます。数多くのセッションの中から、データベースに関連したセッションの視聴ガイドを情報収集の目的別に紹介します。

  • Oracle Cloud
  • Oracle Database
2020.04.24

Autonomous DatabaseにData Pumpでデータ投入する方法【Always FreeでもOK!】

世界初の自律型データベースであるAutonomous Databaseは、パッチ適用やチューニングなどの管理タスクを自動化した革新的なサービスです。今回はデータ移行ユーティリティData Pumpを使用してAutonomous Databaseへのデータ投入手順をご紹介します。

  • Oracle Database
2019.12.24

【Oracle Database】DMLリダイレクションで一歩進んだ Active Data Guard の使い方(19c新機能)

Oracle Database 19c では Active Data Guard のスタンバイデータベースからもDML文の実行可能なActive Data Guard DMLリダイレクションという機能が追加されました。

ページの先頭へ戻る