ORA-00257エラーの対応法についてです。
(“archiver error. Connect Internal only, until freed”)
(0) 目次
(1) 原因
(2) 対策
(3) 結果チェック
(4) 用語の解説
(1) 原因
アーカイブログ出力先のフラッシュリカバリ領域容量が満タンになり、新規のアーカイブログを書き出せない場合にエラーとなり接続出来なくなります。
高速リカバリ領域が満タンかどうかは、以下のSQLで確認します。
select name, round(space_limit/1024/1024/1024,2)||'GB' space_limit, round(space_used/1024/1024/1024,2)||'GB' space_used, round((space_limit - space_used)/1024/1024/1024,2)||'GB' space_available, NUMBER_OF_FILES, round(space_used/space_limit ,3)*100 used_percent from v$recovery_file_dest;
満タンの場合、下記の様に表示されます。
(USED_PERCENTが99.2%になっています)
>目次にもどる
(2) 対策
以下のコマンドでフラッシュリカバリ領域にある不要なArchiveログを削除します。削除する時は、OSのファイルを削除しただけでは、領域が解放されないため、RMAN(リカバリマネージャー)から実施する必要があります。
下記のようなコマンドでRMANを起動します(環境変数は各自の設定により異なります)。
sudo su oracle export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 cd /u01/app/oracle/product/11.2.0/dbhome_1/bin/ ./rman
RMANが起動したら以下のコマンドでログを削除します。
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Aug 20 23:29:14 2017 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. RMAN> CONNECT TARGET RMAN> DELETE ARCHIVELOG UNTIL TIME 'sysdate';
本当に削除してよいか、確認が入るので良ければ”YES”と入力。
入力後、削除が始まる。
以下のように”Deleted NN objects”と出たら、削除が完了です。
>目次にもどる
(3) 結果チェック
再度、高速リカバリ領域の容量確認のSQLを流し、領域の解放を確認します。
(USED_PERCENTが14%に減りました)
また、SQL Developerからスキーマへの接続も確認します。
(4) 用語の解説
◆フラッシュリカバリ領域について
フラッシュリカバリ領域とは「バックアップの自動管理」や「素早いリカバリ」のために、リカバリに必要なファイルを格納した領域で、実態はディスク内のディレクトリです。本領域には「制御ファイル」「REDOログのコピー」「アーカイブREDOログ」などリカバリに必要なファイル一式が格納され、領域に存在するファイルはRMANによって自動で容量の管理がされるので、DBA(データベース管理者)の負担を削減する事ができます(※10gより前は各ファイルが任意のディレクトリに保存されており、相互の考慮がなかった)
◆フラッシュリカバリ領域の監視
指定した上限サイズ内でログの管理を行いつつ不要となったファイルの削除も行うものの、DBAは領域が十分に大きいかどうかの十分な監視を行う必要あり(利用状況の監視)。監視には主に「V$RECOVERY_FILE_DEST」ビューや「V$RECOVERY_AREA_USAGE」を用います。
(1)V$RECOVERY_FILE_DEST
容量の制限量、利用量、ファイル数などの情報を参照できる。
(2)V$RECOVERY_AREA_USAGE
ファイル種別毎(イメージコピー、REDOログ、制御ファイルなど)の利用量やファイル数を確認できる。
◆アーカイブREDOログについて
アーカイブREDOログとは、REDOログが上書きされる前に取得したREDOログのコピーファイルの事です。Oracleデータベースにおいては、インスタンスの中の「ARCn」プロセスが、アーカイブREDOログの生成を行います(db_recovery_file_dest)。