【再現/対処】ORA-00257:アーカイブ・エラーです。解除されるまでAS SYSDBAにのみ接続してください。

ORA-00257 ORA-XXXXX

今回は「ORA-00257:アーカイブ・エラーです。解除されるまでAS SYSDBAにのみ接続してください。」について紹介します。
なお、検証環境は以下となります。

OS:Oracle Linux 6.5
DB:Oracle Database 12c R1

参考

ORA-00257: アーカイブ・エラーです。 解除されるまでAS SYSDBAにのみ接続してください。

原因: ARCHプロセスがREDOログをアーカイブしようとして、エラーを受け取りました。 問題がすぐに解決されない場合、データベースはトランザクションの実行を停止します。 ほとんどの場合は、アーカイブ先のデバイスでREDOログ・ファイルを格納する領域が不足していることが原因で、このメッセージが生成されます。 別の考えられる原因として、MANDATORYとしてマークされている宛先で障害が発生しています。

処置: 詳細なエラー情報は、アラート・ログおよびトレース・ファイルを確認してください。

https://docs.oracle.com/cd/E82638_01/errmg/ORA-00000.html#GUID-27437B7F-F0C3-4F1F-9C6E-6780706FB0F6

エラーの再現

-フラッシュリカバリ領域を確認する

本エラーはdb_recovery_file_destに指定したディレクトリに設定されたdb_recovery_file_dest_sizeの容量が不足すると発生します。

SQL> SET WRAP OFF
SQL> COL TYPE FORMAT a15
SQL> SHOW PARAMETER DB_RECOVERY_FILE

DB_RECOVERY_FILE_DEST,DB_RECOVERY_FILE_DEST_SIZE

-Swingbenchを使用して大量のDML文をOracle Databaseへ流し込む。

-現在のフラッシュリカバリ領域の使用状況を確認する。

SQL> COL NAME FORMAT a20
SQL> COL SPACE_LIMIT FORMAT a20
SQL> COL SPACE_USED FORMAT a20
SQL> SELECT NAME,
2 ROUND(SPACE_LIMIT/1024/1024) || 'MB' SPACE_LIMIT,
3 ROUND(SPACE_USED/1024/1024) || 'MB' SPACE_USED
4 FROM V$RECOVERY_FILE_DEST;

参考: https://docs.oracle.com/cd/E82638_01/refrn/V-RECOVERY_FILE_DEST.html#GUID-1E4C34A9-DF91-42EE-A11F-8DFAF9A6998A

-使用領域(SPACE_USED)が増えてきたら、、、

-SQL*PLUSでSYSDBA権限ではないユーザでログインする。

-アラートログファイルを確認する。

$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace
$ vi ./alert_orcl.log

本エラー時は以下メッセージがアラートログに出力される。

ORA-19809、ORA-19804、ORA-19815

【解決方法1】アーカイブ・ログ・ファイルの削除

解決方法の1つ目はdb_recovery_file_destのアーカイブ・ログ・ファイルを削除して、フラッシュリカバリ領域の使用領域を解放します。
OSコマンドで削除するとOracle Databaseとアーカイブ・ログ・ファイルの整合性がとれなくなるので、RMANを使用してアーカイブ・ログ・ファイルを削除する必要があることに注意してください。

-RMANでのアーカイブ・ログ・ファイル削除

$ rman target /
RMAN> DELETE ARCHIVELOG UNTIL TIME 'sysdate - 1';
     書式:DELETE ARCHIVELOG UNTIL TIME 'sysdate - 日数';
例では1日前までのアーカイブ・ログ・ファイルを削除している。

参考: https://docs.oracle.com/cd/E16338_01/backup.112/b56270/rcmsynta016.htm

削除の確認メッセージが表示されるので[YES]と入力し[Enter]をクリックする。

-db_recovery_file_destの使用領域が減ったことを確認する。

SQL> COL NAME FORMAT a20
SQL> COL SPACE_LIMIT FORMAT a20
SQL> COL SPACE_USED FORMAT a20
SQL> SELECT NAME,
2 ROUND(SPACE_LIMIT/1024/1024) || 'MB' SPACE_LIMIT,
3 ROUND(SPACE_USED/1024/1024) || 'MB' SPACE_USED
4 FROM V$RECOVERY_FILE_DEST;

【解決方法2】DB_RECOVERY_FILE_DEST_SIZEの拡張

2つ目の方法として、db_recovery_file_dest_sizeを現在の値よりも大きく設定することでORA-00257を解消します。

-現在の設定値を確認する。

SQL> SET WRAP OFF
SQL> COL TYPE FORMAT a15
SQL> SHOW PARAMETER DB_RECOVERY_FILE

DB_RECOVERY_FILE_DEST,DB_RECOVERY_FILE_DEST_SIZE

-db_recovery_file_dest_sizeの値を変更する。

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE='10G';

システムが変更されました。

-設定値に誤りがないかを確認しておく。

コメント

タイトルとURLをコピーしました