【Oracle】RMAN のカタログモードと nocatalog モードの違い|リカバリカタログの構築・接続方法・使い分けまで解説

【Oracle】RMANのカタログモードとnocatalogモードの違いとは? Oracle

RMAN を使うとき、カタログモードnocatalog モードの 2 つの動作モードを選択できます。両者の違いは「バックアップのメタ情報をどこに保存するか」です。

本記事では、それぞれの仕組み、比較表リカバリカタログ DB の構築手順RMAN の接続コマンド、そしてどちらを選ぶべきかの判断基準まで解説します。

この記事でわかること
・nocatalog モードの仕組みとメリット・デメリット
・カタログモードの仕組みとメリット・デメリット
・両モードの完全比較表
・リカバリカタログ DB の構築手順
・RMAN の接続コマンド(nocatalog / catalog)
・カタログへのデータベース登録
・仮想プライベートカタログ(VPC)
・どちらを選ぶべきかの判断基準
スポンサーリンク

カタログモードと nocatalog モードの比較

項目 nocatalog モード カタログモード
メタ情報の格納先 ターゲット DB の制御ファイル 別 DB のリカバリカタログ
追加 DB 不要 カタログ DB が必要(別インスタンス)
構築の容易さ 設定不要(デフォルト) カタログ DB の構築 + スキーマ作成が必要
バックアップ履歴の保持期間 制御ファイルの保持期間に依存
(CONTROL_FILE_RECORD_KEEP_TIME: デフォルト 7 日)
無制限(カタログ DB に永続保存)
制御ファイル消失時 AUTOBACKUP から復元が必要(DBID が必要) カタログから復元可能(制御ファイルの情報を保持)
複数 DB の一元管理 不可(各 DB 独立) 可能(1 つのカタログで複数 DB を管理)
ストアドスクリプト 使用不可 使用可能(RMAN スクリプトをカタログに保存)
RMAN 接続コマンド rman target / rman target / catalog user/pass@catdb
多くの環境では nocatalog で十分
nocatalog モードはセットアップ不要で、CONTROLFILE AUTOBACKUP ON を設定しておけば制御ファイル消失時も復旧可能です。カタログモードは「複数 DB の一元管理」や「長期のバックアップ履歴保持」が必要な企業環境で使われます。

nocatalog モード

Shell(nocatalog での接続と基本操作)
# nocatalog モードでの接続(デフォルト)
rman target /
# または
rman target sys/password@orcl

# バックアップ情報は制御ファイルに自動記録
RMAN> BACKUP DATABASE;
RMAN> LIST BACKUP SUMMARY;

# 制御ファイルの AUTOBACKUP を必ず ON にする
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONTROL_FILE_RECORD_KEEP_TIME の設定

SQL(履歴保持期間の確認と変更)
-- 現在の設定を確認(デフォルト: 7 日)
SHOW PARAMETER control_file_record_keep_time;

-- 31 日に変更(バックアップ履歴を 31 日間保持)
ALTER SYSTEM SET control_file_record_keep_time = 31 SCOPE=BOTH;

-- RETENTION POLICY の RECOVERY WINDOW と合わせる
-- 例: RECOVERY WINDOW OF 30 DAYS なら keep_time >= 30
CONTROL_FILE_RECORD_KEEP_TIME が短いと古いバックアップ情報が消える
nocatalog モードでは制御ファイルのレコード保持期間を超えたバックアップ情報は自動的に上書きされます。RETENTION POLICY と同じかそれ以上の期間に設定してください。デフォルトの 7 日は短すぎることが多いです。

nocatalog のメリット・デメリット

メリット デメリット
セットアップ不要(すぐ使える) バックアップ履歴の保持期間に制限
追加の DB インスタンス不要 制御ファイル消失時は AUTOBACKUP + DBID が必要
運用がシンプル 複数 DB の一元管理ができない
小〜中規模環境に最適 ストアドスクリプトが使えない

カタログモード

リカバリカタログ DB の構築手順

SQL(カタログスキーマの作成: カタログ DB で実行)
-- (1) カタログ DB にカタログ用ユーザーを作成
CREATE USER rman_catalog IDENTIFIED BY catalog_pass
    DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp
    QUOTA UNLIMITED ON users;

-- (2) RECOVERY_CATALOG_OWNER ロールを付与
GRANT RECOVERY_CATALOG_OWNER TO rman_catalog;
GRANT CONNECT TO rman_catalog;
Shell(リカバリカタログの作成: RMAN で実行)
# カタログ DB に接続してカタログを作成
rman catalog rman_catalog/catalog_pass@catdb

RMAN> CREATE CATALOG;
# recovery catalog created

ターゲット DB をカタログに登録

Shell(DB の登録)
# ターゲット DB + カタログ DB に同時接続
rman target sys/password@orcl catalog rman_catalog/catalog_pass@catdb

# ターゲット DB をカタログに登録
RMAN> REGISTER DATABASE;
# database registered in recovery catalog

# 登録済み DB の一覧
RMAN> LIST DB_UNIQUE_NAME OF DATABASE;

カタログモードでのバックアップ

Shell(カタログモードでの操作)
# カタログモードで接続
rman target / catalog rman_catalog/catalog_pass@catdb

# バックアップ(操作は nocatalog と同じ)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

# バックアップ情報は制御ファイル + カタログ DB の両方に記録
RMAN> LIST BACKUP SUMMARY;

ストアドスクリプト(カタログ専用機能)

Shell(ストアドスクリプト)
# RMAN スクリプトをカタログに保存
RMAN> CREATE SCRIPT daily_backup {
    BACKUP INCREMENTAL LEVEL 1 DATABASE
        PLUS ARCHIVELOG DELETE INPUT;
    DELETE NOPROMPT OBSOLETE;
}

# 保存したスクリプトを実行
RMAN> RUN { EXECUTE SCRIPT daily_backup; }

# スクリプト一覧
RMAN> LIST SCRIPT NAMES;

# スクリプトの内容を表示
RMAN> PRINT SCRIPT daily_backup;
ストアドスクリプトのメリット
・バックアップ手順をカタログに一元保存
・複数 DB で同じスクリプトを共有可能
・スクリプトのバージョン管理(REPLACE SCRIPT で更新)
・OS 上のファイルに依存しない(カタログ DB に保存)

カタログモードのメリット・デメリット

メリット デメリット
バックアップ履歴を無期限に保持 カタログ DB の構築・運用コストが必要
制御ファイル消失時もカタログから復元可能 カタログ DB 自体のバックアップも必要
複数 DB のバックアップを一元管理 ネットワーク接続が必要(カタログ DB への通信)
ストアドスクリプトで手順を標準化 カタログ DB の障害が全 DB の RMAN 操作に影響
カタログ DB 自体のバックアップを忘れない
カタログ DB が壊れると全 DB のバックアップ履歴が失われます。カタログ DB 自体は nocatalog モードでバックアップしてください(カタログで自分自身をバックアップするのは循環依存になるため)。

仮想プライベートカタログ(VPC)

1 つのリカバリカタログを複数の DBA で共有する場合、仮想プライベートカタログを使うと DBA ごとに見える DB を制限できます。

SQL(VPC の設定)
-- (1) VPC ユーザーを作成
CREATE USER dba_tokyo IDENTIFIED BY tokyo_pass
    DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
GRANT RECOVERY_CATALOG_OWNER TO dba_tokyo;

-- (2) カタログオーナーが VPC を作成
rman catalog rman_catalog/catalog_pass@catdb
RMAN> GRANT CATALOG FOR DATABASE orcl_tokyo TO dba_tokyo;

-- (3) VPC ユーザーで接続(自分の DB のみ見える)
rman target / catalog dba_tokyo/tokyo_pass@catdb
RMAN> CREATE VIRTUAL CATALOG;

どちらを選ぶべきか: 判断基準

条件 推奨モード
DB が 1〜2 台で小中規模 nocatalog(セットアップ不要でシンプル)
DB が 3 台以上で一元管理したい カタログ(複数 DB のバックアップを統合管理)
長期(数か月以上)のバックアップ履歴が必要 カタログ(nocatalog は制御ファイルの保持期間に制限)
バックアップ手順を標準化・共有したい カタログ(ストアドスクリプト)
追加の DB インスタンスを用意できない nocatalog(追加インフラ不要)
最もシンプルな構成にしたい nocatalog
nocatalog でも AUTOBACKUP ON + DBID 記録で安全に運用可能
nocatalog の最大のリスクは「制御ファイル消失時の復旧」ですが、CONTROLFILE AUTOBACKUP ON を設定し DBID を記録しておけば AUTOBACKUP から制御ファイルを復元できます。多くの中小規模環境ではこれで十分です。

nocatalog → カタログへの移行(RESYNC)

Shell(既存のバックアップ情報をカタログに同期)
# nocatalog で運用していた DB をカタログに登録
rman target / catalog rman_catalog/catalog_pass@catdb

RMAN> REGISTER DATABASE;

# 制御ファイル内のバックアップ情報をカタログに同期
RMAN> RESYNC CATALOG;

# 以降はカタログモードで運用
nocatalog からカタログへの移行は簡単
REGISTER DATABASE + RESYNC CATALOG で既存のバックアップ履歴がカタログに同期されます。バックアップの取り直しは不要です。逆にカタログ → nocatalog への移行は、単にカタログに接続しなくなるだけです(制御ファイルに情報は残っています)。

実務パターン集

パターン(1): nocatalog での安全な運用設定

Shell
rman target /

# 必須設定
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;

# 制御ファイルの履歴保持期間を合わせる
SQL> ALTER SYSTEM SET control_file_record_keep_time = 31 SCOPE=BOTH;

# DBID を記録しておく
SQL> SELECT DBID FROM V$DATABASE;
# → この値を安全な場所に保管

パターン(2): カタログ DB の最小構成

Shell
# カタログ DB は小さい DB で十分
# 表領域: 500MB〜1GB で開始
# バックアップ: nocatalog モードで RMAN バックアップ

# (1) カタログ DB にスキーマ作成
# CREATE USER rman_catalog ...
# GRANT RECOVERY_CATALOG_OWNER TO rman_catalog;

# (2) カタログ作成
rman catalog rman_catalog/catalog_pass@catdb
RMAN> CREATE CATALOG;

# (3) ターゲット DB を登録
rman target sys/pass@proddb catalog rman_catalog/catalog_pass@catdb
RMAN> REGISTER DATABASE;

パターン(3): 制御ファイル消失時のリカバリ(nocatalog)

Shell
# 制御ファイルが全て消失した場合
rman target /
RMAN> STARTUP NOMOUNT;
RMAN> SET DBID 1234567890;  -- 事前に記録した DBID
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
Shell(制御ファイル消失時のリカバリ: カタログモード)
# カタログモードなら DBID 不要 + AUTOBACKUP 不要
rman target / catalog rman_catalog/catalog_pass@catdb
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE;  -- カタログから自動取得
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;

よくある質問

Qnocatalog とカタログでバックアップの速度は変わりますか?
A変わりません。バックアップ自体の処理は同じで、メタ情報の記録先が異なるだけです。カタログへのメタ情報の書き込みは数秒で完了するため、パフォーマンスへの影響はありません。
Qnocatalog で DBID を記録し忘れました。確認できますか?
ADB が稼働中なら SELECT DBID FROM V$DATABASE で確認できます。停止中の場合は AUTOBACKUP のファイル名に含まれる c-DBID-日付-番号 のパターンから推定できます。
Qカタログ DB が停止中でも nocatalog でバックアップできますか?
Aはい。カタログ DB が停止中でも rman target /(nocatalog)でバックアップを実行できます。カタログへの情報同期は後で RESYNC CATALOG で行えます。
Qカタログ DB のサイズはどのくらい必要ですか?
A管理する DB の数とバックアップ頻度に依存しますが、10 台程度の DB を管理する場合でも 500MB〜1GB で十分です。バックアップデータ自体はカタログに保存されず、メタ情報のみなのでサイズは小さいです。
Qnocatalog からカタログに移行できますか?
Aはい。REGISTER DATABASE + RESYNC CATALOG で既存のバックアップ履歴をカタログに同期できます。バックアップの取り直しは不要です。
Q1 つのカタログで複数の DB を管理する場合の注意は?
A仮想プライベートカタログ(VPC)を使えば DBA ごとに管理対象の DB を分離できます。VPC を使わないと全 DBA が全 DB のバックアップ情報を見れるため、セキュリティ上の懸念がある場合は VPC の設定を検討してください。

まとめ

カタログモードと nocatalog モードの使い分けをまとめます。

やりたいこと 推奨
最もシンプルにバックアップ nocatalog + AUTOBACKUP ON + DBID 記録
バックアップ履歴を長期保持 カタログモード
複数 DB のバックアップを一元管理 カタログモード
バックアップスクリプトを標準化 カタログモード(ストアドスクリプト)
追加インフラなしで運用 nocatalog(追加 DB 不要)
nocatalog からカタログに移行 REGISTER DATABASE + RESYNC CATALOG
カタログ DB 自体のバックアップ nocatalog モードで RMAN バックアップ

増分バックアップは「RMAN 増分バックアップ完全ガイド」、制御ファイルのバックアップは「制御ファイルと SPFILE のバックアップ・復元」、バックアップの自動化は「RMAN バックアップを自動化する方法」も併せて参照してください。