Database Support Blog

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

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

この記事で知りたい情報は得られましたか?

本記事に関連して、Oracle Databaseの障害発生時の対処法や、Oracle Database 21cへのバージョンアップ時の留意点などをご紹介している記事もございます。適宜あわせてお読みください。

Oracle Databaseについてのお問い合わせはこちら

Oracle Databaseのバージョンアップやシステム更改のご相談や技術支援のご要望がございましたら、お気軽にお問い合わせください。




筆者情報

大野 高志

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

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


■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • Oracle Cloud
  • Oracle Database
2024.12.02

OCIでGPUインスタンスを構築してみた

OCIで提供されている生成AIサービスとGPUインスタンスを前回の記事「生成AIにGPUが適している理由」で紹介しました。本記事では、GPUインスタンスをデプロイして、インスタンス上でLLM(大規模言語モデル)の動作環境を構築する方法をご紹介します。

  • Oracle Cloud
  • Oracle Database
2024.11.15

Oracle Cloud VMware SolutionにおけるVMware HCXとは?

前回の記事でお伝えしたとおり、OCVSを構築するとVMwareの複数の機能が利用可能です。 それらの機能の中で、今回はHCXの概要や具体的な機能、OCVSでHCXを利用するメリットなどをお伝えします!

  • Oracle Database
  • Oracle Cloud
2024.11.05

Oracle Database 23ai新機能!メモリーを有効活用する統合メモリー管理

2024年5月にOracle Cloud環境にて、先行してOracle DB 23aiがリリースされました。 Oracle Base Database ServiceにおけるOracle Database 23aiの検証結果を報告します。 今回は「統合メモリー管理」をテーマにお伝えします。

ページの先頭へ戻る