株式会社コーソル

KNOWLEDGE

コーソルの技術情報

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

KNOWLEDGE検索人気のキーワード

Oracle DB Tips

ORA-19809: リカバリ・ファイルの制限を超えています

01.ORA-19809エラーとはどのようなエラーか?

ORA-19809 はフラッシュ・リカバリ領域(11.2以降で高速リカバリ領域と名称変更)が不足した場合に発生するエラーです。
フラッシュ・リカバリ領域とは、バックアップファイル、アーカイブログファイルなどのリカバリ関連のファイルの出力先となるディスク領域です。フラッシュ・リカバリ領域に出力されたファイルはOracle Databaseによって管理され、初期化パラメータDB_RECOVERY_FILE_DEST_SIZEに設定されたサイズを超えないように制御されます。
フラッシュリカバリ領域へファイルを出力しようとして、ファイルサイズの総計がDB_RECOVERY_FILE_DEST_SIZEを超える場合、ORA-19809 エラーが発生します。

02.ORA-19809エラーのエラー出力例

RMAN (Recovery Manager) によるバックアップに失敗した場合のコマンド出力
RMAN> backup database;
backupが開始されました(開始時間: 11-12-15)
:
:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backupコマンド(ORA_DISK_1チャネル上)が12/15/2011 13:27:43で失敗しました
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-19804: 67108864バイトのディスク領域を制限31457280から再生できません

フラッシュリカバリ領域にファイルを出力するコマンドを実行した結果、ORA-19809エラーが発生した場合、ORA-19804エラーが同時に出力されます。

アーカイブログの出力に失敗した場合のアラートログ出力

アーカイブログの出力に失敗した場合、アラートログに以下のようなログが出力されます。

Errors in file /var/log/oracle/xxxx/diag/rdbms/xxxx/xxxx/trace/xxxx_arc1_3853.trc:
ORA-19815: 警告: db_recovery_file_dest_size(31457280バイト)は100.00%バイトが使用され、残り0バイトが使用可能です。
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************
ARC1: Error 19809 Creating archive log file to '/var/log/oracle/xxxx/arch/xxxx/archivelog/2011_12_15/o1_mf_1_7_%u_.arc'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance xxxx - Archival Error
ORA-16038: ログ1、順序番号7をアーカイブできません。
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-00312: オンライン・ログ1 スレッド1: '/oradata/xxxx/redo01/redo111.log'
ORA-00312: オンライン・ログ1 スレッド1: '/oradata/xxxx/redo02/redo112.log'

ORA-19809エラー発生時、アラートログにはORA-19809エラーとあわせてORA-19815エラーが出力されます。

03.ORA-19809の一般的な発生要因と対処

フラッシュ・リカバリ領域に出力されたファイルサイズの総計が初期化パラメータ DB_RECOVERY_FILE_DEST_SIZEを超えたことが本エラーの発生要因です。
このため、ORA-19809エラー発生時には、以下のいずれかの対処を行う必要があります。

  • フラッシュ・リカバリ領域にある不要なファイルを削除する
  • DB_RECOVERY_FILE_DEST_SIZE の値を大きくする

 

フラッシュ・リカバリ領域にある不要なファイルを削除する

RMAN の DELETE コマンドを使用してフラッシュ・リカバリ領域にある不要なファイルを削除します。なお、RMANのDELETEコマンドを使用せずに、OS コマンドを使用してファイルを直接削除した場合、Oracle Database はフラッシュ・リカバリ領域の空き領域が増加したと認識しないため、注意が必要です。
また、不要なファイルがない場合は、DB_RECOVERY_FILE_DEST_SIZE の値を大きくする必要があります。

DB_RECOVERY_FILE_DEST_SIZE の値を大きくする

初期化パラメータファイルの値を変更後にデータベースの再起動を行うか、ALTER SYSTEM コマンドで動的に変更します。

04.ORA-19809に関するFAQ

OS コマンドを使用してファイルを削除して確保したフラッシュ・リカバリ領域の空き領域を、Oracle Databaseに認識させるには?

RMAN の CROSSCHECK コマンドにて OS 上で削除されているファイルを Oracle Database に認識させてから、DELETE EXPIRED コマンドにて無効となっているファイルの情報を論理的に削除する必要があります。
アーカイブログファイルを削除した場合の実行例を以下に示します。

RMAN を使用して接続します。
$ rman target /
OS 上で削除されているアーカイブログファイルを Oracle が持っている情報から削除するためにチェックをつけます。
RMAN> crosscheck archivelog all;
チェックをつけたファイルを削除します。
RMAN> delete expired archivelog all;

05.キーワード

ORA-19809 ORA-19804 ORA-19815 フラッシュ・リカバリ領域 DB_RECOVERY_FILE_DEST DB_RECOVERY_FILE_DEST_SIZE