今回は「ORA-00257:アーカイブ・エラーです。解除されるまでAS SYSDBAにのみ接続してください。」について紹介します。
なお、検証環境は以下となります。
OS:Oracle Linux 6.5
DB:Oracle Database 12c R1
参考
ORA-00257: アーカイブ・エラーです。 解除されるまでAS SYSDBAにのみ接続してください。
https://docs.oracle.com/cd/E82638_01/errmg/ORA-00000.html#GUID-27437B7F-F0C3-4F1F-9C6E-6780706FB0F6
原因: ARCHプロセスがREDOログをアーカイブしようとして、エラーを受け取りました。 問題がすぐに解決されない場合、データベースはトランザクションの実行を停止します。 ほとんどの場合は、アーカイブ先のデバイスでREDOログ・ファイルを格納する領域が不足していることが原因で、このメッセージが生成されます。 別の考えられる原因として、MANDATORYとしてマークされている宛先で障害が発生しています。
処置: 詳細なエラー情報は、アラート・ログおよびトレース・ファイルを確認してください。
エラーの再現
-フラッシュリカバリ領域を確認する
本エラーはdb_recovery_file_destに指定したディレクトリに設定されたdb_recovery_file_dest_sizeの容量が不足すると発生します。
SQL> SET WRAP OFF
SQL> COL TYPE FORMAT a15
SQL> SHOW PARAMETER DB_RECOVERY_FILE

–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_sizeの値を変更する。
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=’10G’;
システムが変更されました。
-設定値に誤りがないかを確認しておく。

コメント