アーカイブ (archive) とは、重要記録を保存・活用し、未来に伝達することをいう。日本では一般的に書庫や保存記録と訳されることが多いが、元来は公記録保管所、または公文書の保存所、履歴などを意味し、記録を保存しておく場所である(公文書館も参照のこと)。
⇧ 保存場所だったんですね。
いや~、Oracle Database のエラーが頻繁に出ること出ること。
リクエストされた操作の実行中にエラーが発生しました: ORA-00257: アーカイブ・エラーです。解除されるまでAS SYSDBAにのみ接続してください。 00257. 00000 - "Archiver error. Connect AS SYSDBA only until resolved." *Cause: The archiver process received an error while trying to archive a redo log. If the problem is not resolved soon, the database will stop executing transactions. The most likely cause of this message is that the destination device is out of space to store the redo log file. Another possible cause is that a destination marked as MANDATORY has failed. *Action: Check the alert log and trace files for detailed error information. ベンダー・コード257
ってな感じで、「redo logを保存するためのデバイスの空き容量が不足してるんじゃないの?」ってことらしい。
『「alert log」か「trace files」を確認してくれ 』ってことらしいんだけど、ファイルの場所は教えてくれない、安定の不親切さ、流石はOracleさん。
調べてみた
まずは、「alert log」はどこかを確認ですと。
アラート・ログを含むすべての診断データがADRに格納されている。
各種ログの配置先やADRのベースディレクトリを確認したい場合は、v$diag_info を確認する。
※製品やインスタンスIDで内容は異なる。
⇧ ということらしいですと。
とりあえず、エラーが解消されるまでは「AS SYSDBA」でしか接続できないらしいので、
で、確認。
ちなみに、
⇧ ということみたいなので、CDBのアラートログを確認すれば良さ気っぽい。
で、「アラートログ」を確認したところ、
2020-08-07T23:04:27.552450+09:00 ************************************************************************ 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. ************************************************************************ 2020-08-07T23:04:27.575404+09:00 Errors in file C:\APP02\APP\TS0818\diag\rdbms\orcldb\orcldb\trace\orcldb_tt00_10420.trc: ORA-19809: リカバリ・ファイルの制限を超えています ORA-19804: 209715200バイトのディスク領域を13350469632バイト制限から再利用できません ...省略 >>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=28 System State dumped to trace file C:\APP02\APP\TS0818\diag\rdbms\orcldb\orcldb\trace\orcldb_mmon_1312.trc 2020-08-07T23:21:51.294529+09:00 ORA-12751: CPU時間または実行時のポリシー違反 2020-08-07T23:21:57.406248+09:00 Suspending MMON action 'AWR Auto Flush Task' for 104400 seconds 2020-08-07T23:22:27.735088+09:00 Errors in file C:\APP02\APP\TS0818\diag\rdbms\orcldb\orcldb\trace\orcldb_tt00_10420.trc: ORA-19815: 警告: db_recovery_file_dest_size(13350469632バイト)は99.86%バイトが使用され、残り18825216バイトが使用可能です。
って 感じですと。
どうやら、アーカイブログを削除すれば良いんだと。
アーカイブログは一般的に世代管理/N日分を保存といったポリシーを設定し、バックアップ取得時に削除する運用をされているケースが多く見られます。
しかし、「繁忙期で更新処理が大量に行われ想定以上のアーカイブログが出力された」、「バックアップジョブが何かしらの理由により動作していなかった」といった理由でアーカイブログの出力先空き容量が枯渇すると「ORA-00257:アーカイブ・エラーです。解除されるまでAS SYSDBAにのみ接続してください。」などのエラーが発生し一般ユーザでの新規接続ができない/既存の更新処理がハングするといった状態になります。
⇧ ということみたい。
なので、対策としては、
- ディスクの容量自体を増やす
- アーカイブログなどを削除して空き容量を増やす
のどちらかになるってことみたいね。
で、削除する場合は「RMAN」って言うツールを使えば良いらしいですと。
ふと思い出したのが、
⇧ 過去の記事で、「ORA-03113: 通信チャネルでend-of-fileが検出されました」ってエラーが発生して、『フラッシュ・リカバリ領域』の空き容量無いよ問題がありまして、そこでも「RMAN」使えってことだったかと。
Oracle Database にほとんどデータ入れてないのに、空き容量がすぐ枯渇するのが気になって仕方ないんだが...
RMANで削除
というわけで、「RMAN」でデータベースに接続。普通に、「rman target sys/[sysユーザのパスワード]」でも接続できます。
"[ORACLE_HOME]\bin\rman.exe" target sys/[sysユーザのパスワード]
RMANでアーカイブログ全削除
DELETE ARCHIVELOG ALL;
削除されました。
RMANは、普通に、exit で終了できるっぽい。
よく分からんけど、
フォルダは残るみたいね...
リカバリカタログを使用していない場合、アーカイブログの情報は制御ファイルで保持されます。制御ファイルでのアーカイブログ情報の保証期間は control_file_record_keep_time で設定されておりデフォルトでは7日です。そのため、8日以上前のアーカイブログの情報は上書きされる可能性があります。※時間経過後即上書きされるわけではありません。
制御ファイル上で上書きされたアーカイブログは"RMAN> list archivelog all;"に出力されず、"RMAN> delete archivelog all;"でも削除されません。ディスク上にこのようなアーカイブログが存在する場合、ファイルシステムの場合はOSコマンドで削除して問題ありません。
⇧ 「RMAN」でも削除できないものがあるらしい...「RMAN」以外で削除するなって言ったり、「RMAN」以外で削除しろって言ったり、Oracleさん統一が取れてないすね。
ちなみに、「RMAN」で「アーカイブログ」を全削除したところ、無事接続できるようになりました。
相変わらず、Oracleさんはモヤモヤすることが多いですかね...
今回はこのへんで。