Oracle Databaseの高速リカバリ領域(旧:フラッシュ・リカバリ領域)って何ぞ?

f:id:ts0818:20200506225749j:plain

光速(こうそく、speed of light)、あるいは光速度(こうそくど)とは、が伝播する速さのことである真空中における光速の値は 299792458 m/s(≒30万キロメートル毎秒)と定義されている。

光速 - Wikipedia

太陽から地球まで約8分20秒(8分19秒とする場合もある)、から地球は、2秒もかからない。俗に「1秒間に地球を7回半回ることができる速さ」とも表現される

光速 - Wikipedia

⇧ 光速と言えば、

 E = mc^2

の式とアルベルト・アインシュタイン氏が連想されますが、今回は「高速リカバリ領域(旧:フラッシュ・リカバリ領域)」ってものにレッツトライ~。

 

 

Oracle Database 19c に接続できない...

久々に、接続しようとしたら、接続できないという...

何か、Windowsのサービスとしては起動してたんだけど、ORACLEインスタンスとしては起動してなかったらしい。

で、起動を試みるも、

f:id:ts0818:20200506202639p:plain

⇧ データベースがオープンされない...

 

www.projectgroup.info

qiita.com

⇧ フラッシュ・リカバリ領域なるものに空きが無いんですと。

ちなみに、Windowsの場合、インストールしてる場所にもよると思うけども、

「C:\[Oracle Databaseインストール時に決めたディレクトリ]\[Oracle Databaseのユーザ名]\diag\rdbms\orcldb\orcldb\trace\alert_orcldb.log」 

ってな場所に、「alert.log」っぽいものがあるらしく、そこでエラーの詳細とか分かるみたい。

f:id:ts0818:20200507212950p:plain

2020年5月7日(木)追記:↓ ここから

ログを抜粋したところ、

Errors in file C:\APP02\APP\TS0818\diag\rdbms\orcldb\orcldb\trace\orcldb_arc2_22920.trc:
ORA-19815: 警告: db_recovery_file_dest_size(13350469632バイト)は100.00%バイトが使用され、残り0バイトが使用可能です。
2020-05-06T20:42:08.316119+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-05-06T20:42:08.395075+09:00
Errors in file C:\APP02\APP\TS0818\diag\rdbms\orcldb\orcldb\trace\orcldb_arc2_22920.trc:
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-19804: 177892864バイトのディスク領域を13350469632バイト制限から再利用できません
ARC2 (PID:22920): Error 19809 Creating archive log file to 'C:\APP02\APP\TS0818\FAST_RECOVERY_AREA\ORCLDB\ARCHIVELOG\2020_05_06\O1_MF_1_77_%U_.ARC'
ARC2 (PID:22920): Stuck archiver: inactive mandatory LAD:1
ARC2 (PID:22920): Stuck archiver condition declared
2020-05-06T20:42:08.538991+09:00
Errors in file C:\APP02\APP\TS0818\diag\rdbms\orcldb\orcldb\trace\orcldb_arc2_22920.trc:
ORA-16038: ログ2、順序番号77をアーカイブできません。
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-00312: オンライン・ログ2 スレッド1: 'C:\APP02\APP\TS0818\ORADATA\ORCLDB\REDO02.LOG'    

 ⇧ ってな感じで、RMANってコマンド使えって言ってたですね。

 

 ちなみに、

「C:\[Oracle Databaseインストール時に決めたディレクトリ]\[Oracle Databaseのユーザ名]\diag\rdbms\orcldb\orcldb\alert\log.xml」 なるものもあるようです。

f:id:ts0818:20200507213055p:plain

2020年5月7日(木)追記:↑ ここまで

 

高速リカバリ領域(旧:フラッシュ・リカバリ領域)とは?

名前が変わったらしい。(11g とかまでは、「フラッシュ・リカバリ領域」と呼ばれていたのではないかと。12c からしOracle Database 使ったことないから分からんけど。)

高速リカバリ領域とは、バックアップおよびリカバリ・ファイルの記憶域の場所を集中化するOracle管理ディレクトリ、ファイル・システムまたはOracle Automatic Storage Managementディスク・グループのことです。アーカイブ・ログとフラッシュバック・ログは高速リカバリ領域に作成されます。

高速リカバリ領域

⇧  バックアップとかで使われるみたい。

Oracle Recovery Manager (RMAN)は、バックアップ・セットおよびイメージ・コピーを高速リカバリ領域に格納し、メディア・リカバリ時にこれらを使用してファイルをリストアします。高速リカバリ領域は、テープ用のディスク・キャッシュとしても機能します。

高速リカバリ領域

⇧ なるほど~、って言うか、おかしくない?

私、Oracle Database 19c ほとんど使ってないんですけど...なのに何で空き容量が無くなってんのよ。

Oracle Databaseではこの記憶域を自動的に管理し、不要になったファイルを削除します。バックアップを定期的にテープにコピーすると、他のファイル用に高速リカバリ領域を解放できます。

高速リカバリ領域

⇧ 自動的に管理されてなかったってことかいな?

まぁ、

インストール時に高速リカバリ領域の場所を指定しなかった場合、インストール・プロセスにより、Oracleベース・ディレクトリに高速リカバリ領域が自動的に構成されます。ただし、データベース・ファイルとは別のストレージ・デバイスに高速リカバリ領域を配置することをお薦めします。

高速リカバリ領域の構成

⇧ サラッと言われてもね...

って言うか、デフォルトの場合の「高速リカバリ領域」に該当するディレクトリのパスぐらい記載してくれても良い気はするんだけど、流石はOracleさん、安定の不親切さ。

 

不要なファイルを削除してみる

「高速リカバリ領域(旧:フラッシュ・リカバリ領域)」ってのがどこにあるのかなのだけど、これは完全に推測になりますが、 名前からして、Windowsの場合は、「C:\[Oracle Databaseインストール時に決めたディレクトリ]\[Oracle Databaseのユーザ名]\fast_recovery_area」ってことになるのかね?

f:id:ts0818:20200506202547p:plain

⇧ 12.3 GB って...

何で、そんなに容量を食ってるのか謎過ぎるんだけど...とりあえず削除で。

f:id:ts0818:20200506202858p:plain

で、再起動かけてみるも、 

f:id:ts0818:20200506203124p:plain

駄目でしたけど...

ARCHIVELOG はすぐできるんだね...

f:id:ts0818:20200506203234p:plain

どうやら、

ameblo.jp

ところが、フラッシュ・リカバリ領域が一杯になった場合は、ファイルを物理的に移動しても削除しても解消しません。

フラッシュ・リカバリ領域は Oracleによって論理的に管理されているため、物理的に削除されても空き領域が増えたと判断されないからです。

[Oracle] フラッシュ・リカバリ領域が一杯になりOracleが応答しなくなる | Archive Redo Blog

⇧ 何やて~!って感じです。

 

www.projectgroup.info www.k-hitorigoto.online

⇧ 上記サイト様を参考に、

rman target sys/[sysユーザのパスワード]   

f:id:ts0818:20200506205514j:plain

⇧ って言うか、「rman target /」のコマンドは何か駄目でした...

「archive」されたログファイルの全量を確認。

crosscheck archivelog all;    

f:id:ts0818:20200506205923j:plain

削除で。

delete expired archivelog all;    

f:id:ts0818:20200506205935j:plain

「yes」 で。

f:id:ts0818:20200506210312j:plain

f:id:ts0818:20200506210259j:plain

で、WindowsOracle Database をインストールしてる場合は、WindowsOracle Database に該当するサービス(私の場合は、Oracle Database 19c)を再起動で。

f:id:ts0818:20200506211932p:plain

ORACLEインスタンスにアクセスできて、CDBに接続できました。

f:id:ts0818:20200506211847p:plain

 PDBを起動します。

f:id:ts0818:20200506213021p:plain

SQL Developer で接続してみる。

f:id:ts0818:20200506221829p:plain

パスワードを入力。

f:id:ts0818:20200506221937p:plain

パスワードが有効期限切れになるって...

f:id:ts0818:20200506213234p:plain

とりあえず、接続はできました。

f:id:ts0818:20200506213358p:plain

 

う~ん、 結局、「高速リカバリ領域(旧:フラッシュ・リカバリ領域)」の領域が何故に逼迫してたのか、サッパリ原因が分からん...

モヤモヤ感しか残らなんな~

今回はこのへんで。