V$RMAN_OUTPUTビューを試す（Oracle Database 19c）

本記事は JPOUG Advent Calendar 2024 17 日目の記事となります。JPOUG Advent Calender 2024 16 日目の記事は「けんぼー」さんの [SELECTなのに更新処理？！～遅延ブロッククリーンアウトの動きに迫る～](https://kemboooo.hatenablog.com/entry/2024/12/16/184605) でした。

# V$RMAN_OUTPUT ビュー
V\\$RMAN_OUTPUT ビューは RMAN の操作により出力されたメッセージを格納し、検索することができます。V$RMAN_OUTPUT ビューは以下の列構成になっています。

|列名|データ型|説明|
|:---|:---|:---|
|SID|NUMBER|RMAN 操作セッションのID|
|RECID|NUMBER|V$RMAN_STATUS 行のレコードID|
|STAMP|NUMBER|V$RMAN_STATUS 行のタイムスタンプ|
|SESSION_RECID|NUMBER|セッションのレコード ID|
|SESSION_STAMP|NUMBER|セッションのタイムスタンプ|
|OUTPUT|NUMBER|レポートされたメッセージ|
|RMAN_STATUS_RECID|NUMBER|所有 V$RMAN_STATUS レコード ID|
|RMAN_STATUS_STAMP|NUMBER|所有 V$RMAN_STATUS スタンプ|
|SESSION_KEY|NUMBER|セッション識別子|
|GUID|NUMBER|PDB の GUID|
|CON_ID|NUMBER|コンテナの ID|


# RMAN OUTPUT 設定
Oracle Database 12c (12.1) から RMAN 構成パラメーターに「RMAN OUTPUT」が追加されました。デフォルト値は「TO KEEP 7 DAYS」です。このパラメーターは V$RMAN_OUTPUT ビューにデータを保存する日数を指定します。

``` SQL:RMAN設定一覧
RMAN> SHOW RMAN OUTPUT;

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
db_unique_name O19PのデータベースにおけるRMAN構成パラメータ:
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
```

# V$RMAN_OUTPUT ビューの検索
　V\\$RMAN_OUTPUT ビューに対する検索処理の実行計画を取得すると、ビューの実体は X$KRBMROT テーブルであることがわかります。

```SQL: V$RMAN_OUTPUT ビュー検索の実行計画を確認
SQL> SELECT COUNT(*) FROM V$RMAN_OUTPUT;

  COUNT(*)
----------
        25

実行計画
----------------------------------------------------------
Plan hash value: 169197109

-------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)|
-------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |     1 |     0   (0)|
|   1 |  SORT AGGREGATE    |           |     1 |            |
|*  2 |   FILTER           |           |       |            |
|   3 |    FIXED TABLE FULL| X$KRBMROT |     1 |            |
-------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   2 - filter(USERENV('INSTANCE') IS NOT NULL)
```

## RAC 構成の場合
複数ノードで構成される Real Application Clusters (RAC) の場合、V$RMAN_OUTPUT ビューは、各インスタンスで実行された RMAN コマンドの結果を別々に出力します。以下の例では RAC を構成するインスタンス#1 では SHOW ALL コマンドの実行結果が出力されていますが、インスタンス#2 では SHOW RETENTION POLICY コマンドの結果のみ出力されています。

```SQL: RAC#1 インスタンスの V$RMAN_OUTPUT
SQL> SELECT OUTPUT FROM V$RMAN_OUTPUT ORDER BY STAMP;

OUTPUT
--------------------------------------------------------------------------------
ターゲット・データベース: O19V (DBID=563570684)に接続されました
db_unique_name O19VのデータベースにおけるRMAN構成パラメータ:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用 しています
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/snapcf_o19v1.f'; # default
```

```SQL: RAC#2 インスタンスの V$RMAN_OUTPUT
SQL> SELECT OUTPUT FROM V$RMAN_OUTPUT ORDER BY STAMP;

OUTPUT
--------------------------------------------------------------------------------
ターゲット・データベース: O19V (DBID=563570684)に接続されました
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用 しています

db_unique_name O19VのデータベースにおけるRMAN構成パラメータ:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
```

## Data Guard スタンバイの場合
　Data Guard 構成のプライマリ・データベースとスタンバイ・データベースでは、V\\$RMAN_OUTPUT ビューの内容は異なります。それぞれのデータベースで操作された RMAN コマンドの履歴が出力されます。以下の例では、プライマリ・データベースで V$RMAN_OUTPUT ビューを検索した場合には接続ログしか出力されませんが、スタンバイ・データベースで検索した場合は設定変更のログと設定エラーのログが出力されます。

```SQL: プライマリ・データベースの V$RMAN_OUTPUT ビュー
SQL> SELECT OUTPUT FROM V$RMAN_OUTPUT ORDER BY STAMP;

OUTPUT
--------------------------------------------------------------------------------
ターゲット・データベース: O19P (DBID=2302801788)に接続されました
```

```SQL: スタンバイ・データベースの V$RMAN_OUTPUT ビュー
OUTPUT
--------------------------------------------------------------------------------
ターゲット・データベース: O19P (DBID=2302801788、未オープン)に接続され ました
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: configureコマンドが03/14/2024 14:48:20で失敗しました
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用 しています

RMAN-05021: この構成はBACKUPまたはSTANDBY制御ファイル用に変更できません
新しいRMAN構成パラメータ:
CONFIGURE BACKUP OPTIMIZATION ON;
新しいRMAN構成パラメータが格納できました
```

# その他の RMAN 関連ビュー
RMAN に関するビューは V\$RMAN_OUTPUT 以外にも複数あります。詳細はマニュアル「[Oracle Database データベース・リファレンス](https://docs.oracle.com/cd/G11854_01/refrn/index.html)」を参照してください。

|ビュー名|内容|備考|
|:---|:---|:---|
|V$RMAN_BACKUP_JOB_DETAIS|バックアップジョブの詳細情報||
|V$RMAN_BACKUP_SUBJOB_DETAILS|バックアップジョブのマージ情報||
|V$BACKUP_TYPE|バックアップタイプの情報||
|V$RMAN_COMPRESSION_ALGOTITHM|サポートされた圧縮アルゴリズム||
|V$RMAN_CONFIGURATION|CONFIGURE 設定情報||
|V$RMAN_ENCRYPTION_ALGORITHMS|暗号化アルゴリズム||
|V$RMAN_STATUS|実行中または完了したバックヤップジョブのステータス||

Author: Noriyoshi Shinoda / Date: December 17, 2024