【完全ガイド】Oracle RMAN バックアップ完全ガイド|Level 0/1・FRA・リテンション・PITR 徹底解説
- 作成日 2026.09.07
- Oracle Database
Oracle DBA として必ずマスターすべきツール、それが RMAN (Recovery Manager) です:
$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jun 6 10:00:00 2026
connected to target database: ORCL (DBID=1234567890)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
Oracle 公式標準バックアップツールとして、以下の圧倒的優位性:
- ブロックレベルでの破損検出(DBVERIFY 相当を自動)
- 増分バックアップ(Level 0/1)で大幅な時間短縮
- 圧縮(BASIC/MEDIUM/HIGH)でサイズ削減
- 並列化(PARALLELISM)で高速化
- FRA (Fast Recovery Area) による自動管理
- PITR (Point-In-Time Recovery) で任意時点への復旧
DUPLICATEによるStandby DB 作成- Data Guard とのシームレス連携
- 暗号化でセキュリティ担保
- Recovery Catalog による複数 DB 集中管理
このツールの本質は、Oracle 公式 Backup and Recovery User’s Guide が明確に定義:
「RMAN は Oracle Database の包括的なバックアップ・リカバリ管理ツール。
データファイル、コントロールファイル、REDO ログ、アーカイブログの
完全性を保証し、任意時点への復旧を可能にする」
- 1. 結論:CONFIGURE → BACKUP → VALIDATE
- 2. RMAN の基本概念
- 3. CONFIGURE:永続設定
- 4. バックアップ種類
- 5. Fast Recovery Area (FRA)
- 6. リテンションポリシー
- 7. アーカイブログ管理
- 8. リストア&リカバリ
- 9. 圧縮
- 10. 暗号化
- 11. TAG 管理
- 12. 検証
- 13. DUPLICATE(DB 複製)
- 14. Data Guard 連携
- 15. Autonomous DB での RMAN
- 16. パフォーマンス最適化
- 17. Recovery Catalog
- 18. 実践シナリオ
- 19. トラブルシューティング
- 20. 監視統合(Rails/Java/Python)
- 21. トラブルシューティング
- 22. よくある質問(FAQ)
- 22.1. Q1. Level 0 と Full の違い
- 22.2. Q2. Differential vs Cumulative
- 22.3. Q3. RECOVERY WINDOW vs REDUNDANCY
- 22.4. Q4. COMPRESSION ライセンス
- 22.5. Q5. FRA 推奨サイズ
- 22.6. Q6. Autoback CONTROLFILE
- 22.7. Q7. Recovery Catalog
- 22.8. Q8. Autonomous DB
- 22.9. Q9. Rails 監視
- 22.10. Q10. Docker
- 22.11. Q11. Data Guard 併用
- 22.12. Q12. 予防的検証
- 23. 参考リンク
- 24. まとめ
なぜ OS レベルバックアップではダメなのか
cp / tar / rsync 等でのバックアップは現代では推奨されない理由:
OS バックアップ:
❌ ホットバックアップに ALTER TABLESPACE BEGIN BACKUP 必要
❌ ブロック整合性チェックなし
❌ 増分バックアップ不可
❌ 圧縮・暗号化は別ツール
❌ Data Guard 連携不可
❌ FRA 統合なし
RMAN:
✅ オンラインで安全
✅ ブロック整合性を自動チェック
✅ 増分バックアップで高速
✅ 圧縮・暗号化を統合
✅ Data Guard シームレス
✅ FRA 完全管理
RMAN が対処する 4 大障害
本サイトで既に扱った DBA 系エラーは全て RMAN で対処可能:
ORA-00257: archiver error → RMAN でアーカイブログ管理
ORA-01578: data block corrupted → RMAN BLOCKRECOVER
ORA-00376: file cannot be read → RMAN RESTORE DATAFILE
ORA-01102: cannot mount database → RMAN RESTORE + RECOVER
現場で使う RMAN の主要機能:
- バックアップ(Full / Level 0 / Level 1、Differential / Cumulative)
- リストア(RESTORE DATABASE / DATAFILE / TABLESPACE)
- リカバリ(RECOVER + アーカイブログ適用)
- PITR(SET UNTIL TIME/SCN/SEQUENCE)
- FRA 管理
- リテンションポリシー
- 圧縮(
AS COMPRESSED BACKUPSET) - 暗号化(
SET ENCRYPTION) - アーカイブログ管理(
PLUS ARCHIVELOG DELETE INPUT) - BLOCKRECOVER(ブロック単位復旧)
- DUPLICATE(DB 複製)
- CROSSCHECK + DELETE OBSOLETE(不要ファイル削除)
- REPORT / LIST(バックアップ状況確認)
- Recovery Catalog(複数 DB 集中管理)
- Data Guard 連携
多くの日本語記事が「BACKUP DATABASE」だけで終わりますが、実務では:
CONFIGUREによる永続設定の理解- Level 0/1 + Cumulative/Differential の戦略選択
- FRA サイズの適切な設定(DB サイズの 2-3 倍推奨)
- リテンションのRECOVERY WINDOW vs REDUNDANCY
SECTION SIZEによる大規模ファイル並列化VALIDATEによる定期検証REPORT SCHEMAでバックアップ対象確認LIST FAILUREによる障害管理(Data Recovery Advisor)- Autonomous DB での自動バックアップ
- Cloud Object Storage へのバックアップ
さらに、現代の RMAN 実務での必須知識:
-- 基本設定(一度だけ)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
-- 週次: Level 0
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;
-- 日次: Level 1
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG DELETE INPUT;
-- 週次: 検証
RESTORE DATABASE VALIDATE;
-- 定期: 不要削除
DELETE OBSOLETE;
CROSSCHECK BACKUP;
本記事では、Oracle RMAN の全てを実務レベルで完全網羅。基本概念、CONFIGURE、Level 0/1、FRA、リテンション、圧縮、暗号化、PITR、DUPLICATE、Data Guard、Autonomous DB、Rails/Java/Python 監視統合、実践シナリオ、トラブルシューティング、FAQまで。この1本で RMAN をプロフェッショナルに扱えるようになります。
結論:CONFIGURE → BACKUP → VALIDATE
時間がない方向けに、最速の実務パターンを先に示します。
最小構成の日次バックアップスクリプト
#!/bin/bash
# rman_backup.sh
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
rman target / <<EOF
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE
PLUS ARCHIVELOG DELETE INPUT
TAG 'DAILY_$(date +%Y%m%d)';
DELETE NOPROMPT OBSOLETE;
EXIT
EOF
週次スクリプト
#!/bin/bash
# rman_weekly.sh
rman target / <<EOF
BACKUP INCREMENTAL LEVEL 0 DATABASE
PLUS ARCHIVELOG DELETE INPUT
TAG 'WEEKLY_$(date +%Y%m%d)';
RESTORE DATABASE VALIDATE;
CROSSCHECK BACKUP;
DELETE NOPROMPT OBSOLETE;
EXIT
EOF
6つの必須知識
| # | トピック | 概要 |
|---|---|---|
| ① | CONFIGURE | 永続設定 |
| ② | Level 0/1 | 増分戦略 |
| ③ | FRA | 自動管理領域 |
| ④ | RETENTION | 保存期間 |
| ⑤ | PITR | 時点復旧 |
| ⑥ | VALIDATE | 検証 |
詳細は以下で解説します。
RMAN の基本概念
アーキテクチャ
┌─────────────────────────────────────┐
│ RMAN Client │
│ ($ rman target /) │
└──────────┬──────────────────────────┘
│
┌──────────▼──────────────────────────┐
│ Target Database │
│ ├── Controlfile(メタデータ格納) │
│ ├── Datafiles │
│ ├── Archived Redo Logs │
│ └── Server Process │
└──────────┬──────────────────────────┘
│
┌──────────▼──────────────────────────┐
│ Backup Destination │
│ ├── FRA (Fast Recovery Area) │
│ ├── Disk │
│ ├── Tape (SBT) │
│ └── Cloud Object Storage │
└─────────────────────────────────────┘
Backup Set vs Image Copy
Backup Set(デフォルト):
BACKUP DATABASE;
-- または明示
BACKUP AS BACKUPSET DATABASE;
- RMAN 独自形式
- 圧縮可能
- Backup Piece に分割
- テープ対応
Image Copy:
BACKUP AS COPY DATABASE;
- OS ファイルのコピー
- スイッチイン可能(
SWITCH DATAFILE TO COPY) - 圧縮不可
- 増分マージ可能
接続方法
# 認証なし(OS 認証)
$ rman target /
# パスワード認証
$ rman target sys/pass@ORCL
# Recovery Catalog 使用
$ rman target / catalog rman_user/pw@rcat_db
# NOCATALOG(controlfile のみ)
$ rman target / nocatalog
CONFIGURE:永続設定
現状確認
RMAN> SHOW ALL;
主要な永続設定
-- リテンションポリシー(保持期間)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
-- または冗長度
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
-- Controlfile 自動バックアップ(必須!)
CONFIGURE CONTROLFILE AUTOBACKUP ON;
-- 並列度
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
-- 圧縮
CONFIGURE COMPRESSION ALGORITHM 'BASIC'; -- ライセンス不要
-- 'MEDIUM' / 'HIGH' は Advanced Compression Option 必要
-- バックアップ最適化
CONFIGURE BACKUP OPTIMIZATION ON;
-- BACKUP コピー数
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
-- 保管先
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%d_%T_%U';
-- 暗号化
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES256';
個別セッション設定(永続化しない)
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP DATABASE;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
バックアップ種類
Full Backup(Full)
BACKUP DATABASE;
BACKUP DATABASE PLUS ARCHIVELOG;
特徴:
- 全ブロックをバックアップ
- Level 1 の Parent にはならない
Incremental Level 0(週次基本)
BACKUP INCREMENTAL LEVEL 0 DATABASE;
特徴:
- 全使用ブロック
- Level 1 の Parent
- 通常の Full より効率的
Incremental Level 1(日次)
Differential(デフォルト、小サイズ):
BACKUP INCREMENTAL LEVEL 1 DATABASE;
- 直前の Level 0 or Level 1 以降の変更ブロック
- 復旧に多くの Level 1 適用必要
Cumulative(大サイズ、高速復旧):
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;
- 直前の Level 0 以降の全変更ブロック
- 復旧は Level 0 + 最新の Level 1 のみ
比較
月曜 Level 0 (100GB)
火曜 Level 1 Differential (5GB) ← 月曜以降変更
水曜 Level 1 Differential (5GB) ← 火曜以降変更
木曜 Level 1 Cumulative (15GB) ← 月曜以降全変更
金曜 Level 1 Cumulative (20GB) ← 月曜以降全変更
木曜復旧:
Differential: Level 0 + 火 + 水 + 木 = 3 適用
Cumulative: Level 0 + 木 = 1 適用(高速)
現代の推奨: Cumulative (復旧速度優先)。
各要素個別バックアップ
-- データベース全体
BACKUP DATABASE;
-- テーブルスペース単位
BACKUP TABLESPACE users, hr_data;
-- データファイル単位
BACKUP DATAFILE 4, 5;
-- コントロールファイル
BACKUP CURRENT CONTROLFILE;
BACKUP SPFILE;
-- アーカイブログ
BACKUP ARCHIVELOG ALL;
BACKUP ARCHIVELOG UNTIL TIME 'SYSDATE-7';
-- 削除付き(推奨)
BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
Fast Recovery Area (FRA)
設定
-- サイズと場所
ALTER SYSTEM SET db_recovery_file_dest_size = 100G SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest = '/u02/fra' SCOPE=BOTH;
-- 確認
SHOW PARAMETER db_recovery_file_dest;
使用状況確認
SELECT name, space_limit/1024/1024/1024 AS limit_gb,
space_used/1024/1024/1024 AS used_gb,
space_reclaimable/1024/1024/1024 AS reclaim_gb,
number_of_files
FROM v$recovery_file_dest;
-- 内訳
SELECT file_type, percent_space_used, percent_space_reclaimable,
number_of_files
FROM v$recovery_area_usage;
推奨サイズ
FRA サイズ =
(Level 0 サイズ) * (RETENTION 日数 / 7)
+ (Level 1 サイズ) * RETENTION 日数
+ (Archivelog 日次サイズ) * RETENTION 日数
+ (Flashback logs)
+ 20% buffer
例: 100GB DB, 14日 retention
= 100GB * 2 + 5GB * 14 + 10GB * 14 + 20%
= 200 + 70 + 140 + 82
= 約 500GB
FRA 関連は ORA-00257: archiver error の記事も参照してください。
リテンションポリシー
RECOVERY WINDOW(推奨)
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
意味: 14 日前まで PITR 可能な状態を維持。
REDUNDANCY
CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
意味: 各 datafile/controlfile を 3 世代保持。
NONE
CONFIGURE RETENTION POLICY TO NONE;
-- 自動削除しない(要手動管理)
適用の実例
Day 1 Level 0 backup ← 削除対象?
Day 2 Level 1 backup
...
Day 15 Level 1 backup ← 現在
RECOVERY WINDOW OF 14 DAYS:
Day 1 は削除対象(14 日超過)
Day 2-15 は保持
DELETE OBSOLETE で実際に削除
OBSOLETE の確認と削除
-- 対象確認
REPORT OBSOLETE;
-- 削除
DELETE OBSOLETE;
-- プロンプトなし
DELETE NOPROMPT OBSOLETE;
アーカイブログ管理
アーカイブログモード確認
ARCHIVE LOG LIST;
-- Database log mode: Archive Mode
-- Automatic archival: Enabled
-- Archive destination: USE_DB_RECOVERY_FILE_DEST
バックアップ + 削除
-- 完全バックアップ後、REDO 削除
BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
-- 期間指定
BACKUP ARCHIVELOG FROM TIME 'SYSDATE-7' UNTIL TIME 'SYSDATE-1'
DELETE INPUT;
-- Sequence 指定
BACKUP ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200 THREAD 1
DELETE INPUT;
DATABASE + ARCHIVELOG 一括
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
動作:
- 現在の REDO を Archive
- Datafile バックアップ
- Archive を含めてバックアップ
- Archive 削除
リストア&リカバリ
完全リカバリ
-- 停止 + MOUNT
STARTUP MOUNT;
-- リストア + リカバリ
RESTORE DATABASE;
RECOVER DATABASE;
-- OPEN
ALTER DATABASE OPEN;
個別リストア
-- Datafile
RESTORE DATAFILE 4;
RECOVER DATAFILE 4;
SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
-- Tablespace
RESTORE TABLESPACE users;
RECOVER TABLESPACE users;
データファイル関連は ORA-00376: file cannot be read の記事も参照してください。
PITR(Point-In-Time Recovery)
時刻指定:
RUN {
STARTUP MOUNT;
SET UNTIL TIME "TO_DATE('2026-06-06 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
SCN 指定:
RUN {
SET UNTIL SCN 1234567890;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
Sequence 指定:
RUN {
SET UNTIL SEQUENCE 12345 THREAD 1;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
BLOCKRECOVER(ブロック単位復旧)
-- V$DATABASE_BLOCK_CORRUPTION から
RECOVER DATAFILE 11 BLOCK 12345;
-- 一括
RECOVER CORRUPTION LIST;
ブロック破損関連は ORA-01578: data block corrupted の記事も参照してください。
圧縮
アルゴリズム
-- BASIC(無料、Enterprise Edition 含む)
CONFIGURE COMPRESSION ALGORITHM 'BASIC';
-- MEDIUM(要 Advanced Compression Option)
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
-- HIGH(最大圧縮、CPU 消費大)
CONFIGURE COMPRESSION ALGORITHM 'HIGH';
-- LOW(最速)
CONFIGURE COMPRESSION ALGORITHM 'LOW';
バックアップ時に個別指定
BACKUP AS COMPRESSED BACKUPSET DATABASE;
圧縮率の目安
BASIC: 2-3x
LOW: 2x(高速)
MEDIUM: 3-4x(バランス)
HIGH: 4-6x(CPU 集中)
暗号化
有効化
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES256';
モード
-- パスワード
SET ENCRYPTION ON IDENTIFIED BY 'mypassword' ONLY;
-- Wallet(TDE 使用)
-- CONFIGURE ENCRYPTION FOR DATABASE ON;
-- Wallet 経由
-- 両方
SET ENCRYPTION ON IDENTIFIED BY 'mypassword';
実行
BACKUP DATABASE;
-- 暗号化された Backup Set が生成
TAG 管理
TAG 付きバックアップ
BACKUP DATABASE TAG 'WEEKLY_2026_06';
BACKUP INCREMENTAL LEVEL 1 DATABASE TAG 'DAILY_20260607';
TAG で管理
LIST BACKUP TAG 'WEEKLY_2026_06';
DELETE BACKUP TAG 'DAILY_20260607';
検証
VALIDATE
-- 全体検証
VALIDATE DATABASE;
-- リストア可能性検証
RESTORE DATABASE VALIDATE;
-- バックアップ整合性
VALIDATE BACKUPSET 123;
-- ヘッダ確認
VALIDATE CURRENT CONTROLFILE;
定期検証スクリプト
#!/bin/bash
rman target / <<EOF
RESTORE DATABASE VALIDATE;
RESTORE CONTROLFILE VALIDATE;
RESTORE ARCHIVELOG ALL VALIDATE;
CROSSCHECK BACKUP;
LIST FAILURE;
EXIT
EOF
V$DATABASE_BLOCK_CORRUPTION
-- 破損ブロック一覧
SELECT * FROM v$database_block_corruption;
-- RMAN で修復
RECOVER CORRUPTION LIST;
DUPLICATE(DB 複製)
Active Database DUPLICATE
-- Target から Auxiliary へ
$ rman target sys/pw@source auxiliary sys/pw@target
RMAN> DUPLICATE TARGET DATABASE TO ORCL_DUP
FROM ACTIVE DATABASE
SPFILE
PARAMETER_VALUE_CONVERT '/u01/source', '/u01/target';
Backup ベース
DUPLICATE TARGET DATABASE TO ORCL_DUP
BACKUP LOCATION '/backup/rman';
Standby DB 作成
DUPLICATE TARGET DATABASE FOR STANDBY
FROM ACTIVE DATABASE
SPFILE
PARAMETER_VALUE_CONVERT '/u01/prod', '/u01/standby'
SET DB_UNIQUE_NAME='ORCL_STDBY';
Data Guard 連携
Standby バックアップ
Standby で実行可能(オフロード):
-- Standby DB で
$ rman target / catalog rman/pw@rcat
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
Primary 負荷なしにバックアップ取得可能。
Backup 共有
-- Primary で作成した Level 0 を Standby に適用可能
-- Recovery Catalog 経由
Autonomous DB での RMAN
Autonomous DB 環境:
- 自動バックアップ(Oracle 管理)
- 60 日保持がデフォルト
- 手動バックアップ: OCI Console / SDK / CLI
- RMAN 直接操作は不可
- PITR は Console から
OCI CLI 例:
oci db autonomous-database create-backup \
--autonomous-database-id ocid1.autonomousdatabase... \
--display-name manual_backup_20260606
パフォーマンス最適化
並列化
-- 4 チャネル並列
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
-- SECTION SIZE(大 datafile を分割)
BACKUP DATABASE SECTION SIZE 10G;
-- BACKUP AS COPY で並列
BACKUP AS COPY DATABASE;
FILESPERSET
-- 1 backup set 内のファイル数
BACKUP DATABASE FILESPERSET 4;
MAXPIECESIZE
-- Backup Piece 最大サイズ
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 4G;
圧縮とのバランス
高速優先: PARALLELISM 8, COMPRESSION LOW
サイズ優先: PARALLELISM 4, COMPRESSION HIGH
バランス: PARALLELISM 4, COMPRESSION MEDIUM
Recovery Catalog
作成
-- Catalog DB でユーザー作成
CREATE USER rman_user IDENTIFIED BY pw
DEFAULT TABLESPACE rman_ts
QUOTA UNLIMITED ON rman_ts;
GRANT RECOVERY_CATALOG_OWNER TO rman_user;
-- Catalog スキーマ作成
$ rman catalog rman_user/pw@rcat
RMAN> CREATE CATALOG;
Target DB 登録
$ rman target / catalog rman_user/pw@rcat
RMAN> REGISTER DATABASE;
メリット
- 複数 DB 集中管理
- 長期保存(controlfile 依存しない)
- STORED SCRIPT 保存
- RECOVERY WINDOW OF N DAYS 拡張可能
実践シナリオ
シナリオ1:初期設定完全版
$ rman target /
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%d_%T_%U';
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY BACKED UP 1 TIMES TO DISK;
SHOW ALL;
EXIT
シナリオ2:日次バックアップ + Cron
#!/bin/bash
# /opt/scripts/rman_daily.sh
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
LOG=/var/log/rman/daily_$(date +%Y%m%d).log
rman target / log=$LOG <<EOF
RUN {
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE
PLUS ARCHIVELOG DELETE INPUT
TAG 'DAILY_$(date +%Y%m%d)';
CROSSCHECK BACKUP;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
}
EXIT
EOF
# 通知
if [ $? -ne 0 ]; then
mail -s "RMAN Daily FAILED" ops@example.com < $LOG
fi
Cron:
0 2 * * 1-6 /opt/scripts/rman_daily.sh # 月-土
0 2 * * 0 /opt/scripts/rman_weekly.sh # 日
crontab の詳細は crontab 使い方の記事も参照してください。
シナリオ3:週次 Level 0 + 検証
#!/bin/bash
# /opt/scripts/rman_weekly.sh
rman target / log=/var/log/rman/weekly_$(date +%Y%m%d).log <<EOF
BACKUP INCREMENTAL LEVEL 0 DATABASE
PLUS ARCHIVELOG DELETE INPUT
TAG 'WEEKLY_L0_$(date +%Y%m%d)';
-- 検証
RESTORE DATABASE VALIDATE;
RESTORE ARCHIVELOG ALL VALIDATE;
-- クリーンアップ
CROSSCHECK BACKUP;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
-- レポート
REPORT SCHEMA;
REPORT NEED BACKUP;
LIST BACKUP SUMMARY;
EXIT
EOF
シナリオ4:緊急 PITR(誤 DROP 対応)
# 誤って DROP TABLE
# 10:15 頃の状態に戻したい
rman target / <<EOF
STARTUP MOUNT FORCE;
RUN {
SET UNTIL TIME "TO_DATE('2026-06-06 10:10:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
EXIT
EOF
シナリオ5:Tablespace PITR
-- ユーザーテーブルスペースのみ復旧
RECOVER TABLESPACE users, hr_data
UNTIL TIME "TO_DATE('2026-06-06 10:00:00', 'YYYY-MM-DD HH24:MI:SS')"
AUXILIARY DESTINATION '/tmp/aux';
シナリオ6:ブロック破損復旧
-- V$DATABASE_BLOCK_CORRUPTION で確認
SQL> SELECT * FROM v$database_block_corruption;
-- 個別復旧
RECOVER DATAFILE 11 BLOCK 12345;
-- 一括
RECOVER CORRUPTION LIST;
シナリオ7:Docker Oracle バックアップ
docker exec -it oracle-xe bash
export ORACLE_SID=XE
rman target / <<EOF
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
EOF
# ホストへコピー
docker cp oracle-xe:/opt/oracle/product/19c/dbhome_1/dbs/backup /host/backup
Docker 関連は docker daemon 接続エラーの記事、Docker no space left on device の記事も参照してください。
シナリオ8:Standby DB 作成(Active DUPLICATE)
# Primary で
$ rman target sys/pw@ORCL auxiliary sys/pw@ORCL_STDBY
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY
FROM ACTIVE DATABASE
SPFILE
PARAMETER_VALUE_CONVERT '/u01/prod', '/u01/standby'
SET DB_UNIQUE_NAME='ORCL_STDBY'
SET FAL_SERVER='ORCL'
SET LOG_ARCHIVE_DEST_2='SERVICE=ORCL LGWR ASYNC';
シナリオ9:DB 複製(開発環境コピー)
# 本番 → 開発
RMAN> DUPLICATE TARGET DATABASE TO ORCL_DEV
FROM ACTIVE DATABASE
SPFILE
PARAMETER_VALUE_CONVERT '/u01/prod', '/u01/dev'
SET DB_NAME='ORCL_DEV';
シナリオ10:Autonomous DB マニュアルバックアップ
# OCI CLI
oci db autonomous-database create-backup \
--autonomous-database-id $ADB_OCID \
--display-name "manual_20260606"
# PITR
oci db autonomous-database restore \
--autonomous-database-id $ADB_OCID \
--timestamp "2026-06-05T10:00:00Z"
トラブルシューティング
FRA フルで ORA-00257
Archive 削除 + FRA 拡張:
BACKUP ARCHIVELOG ALL DELETE INPUT;
ALTER SYSTEM SET db_recovery_file_dest_size = 200G SCOPE=BOTH;
Archive 関連は ORA-00257: archiver error の記事も参照してください。
DELETE OBSOLETE が想定通り動作しない
RETENTION 確認:
SHOW RETENTION POLICY;
REPORT OBSOLETE;
バックアップ遅い
PARALLELISM + COMPRESSION 調整:
CONFIGURE DEVICE TYPE DISK PARALLELISM 8;
CONFIGURE COMPRESSION ALGORITHM 'LOW';
CROSSCHECK で EXPIRED
削除:
DELETE EXPIRED BACKUP;
バックアップサイズが減らない
BACKUP OPTIMIZATION 有効化:
CONFIGURE BACKUP OPTIMIZATION ON;
RESTORE 失敗
controlfile と catalog を確認:
LIST BACKUP OF DATABASE;
RESTORE VALIDATE DATABASE;
監視統合(Rails/Java/Python)
Rails
class RmanMonitor
def self.check_last_backup
result = ActiveRecord::Base.connection.select_all(<<-SQL).first
SELECT MAX(completion_time) AS last_backup
FROM v$backup_set
WHERE backup_type = 'D'
SQL
last = result['last_backup']
if last && last > 25.hours.ago
{ status: 'OK', last_backup: last }
else
{ status: 'ALERT', last_backup: last }
end
end
end
Rails 8 系の詳細は Rails 8 アップグレードガイドの記事も参照してください。
Python
import oracledb
from datetime import datetime, timedelta
def check_rman_status(conn):
cursor = conn.cursor()
cursor.execute("""
SELECT MAX(completion_time) FROM v$backup_set
WHERE backup_type = 'D'
""")
last = cursor.fetchone()[0]
if last and (datetime.now() - last) < timedelta(hours=25):
return {'status': 'OK', 'last_backup': last}
return {'status': 'ALERT', 'last_backup': last}
トラブルシューティング
アーカイブログが増え続ける
バックアップ + 削除:
BACKUP ARCHIVELOG ALL DELETE INPUT;
FRA 100% で書き込み不能
緊急対処:
BACKUP ARCHIVELOG ALL DELETE INPUT;
CROSSCHECK ARCHIVELOG ALL;
DELETE EXPIRED ARCHIVELOG ALL;
根本対処: FRA サイズ拡張。
RESTORE が遅い
PARALLELISM 増:
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK;
ALLOCATE CHANNEL c4 DEVICE TYPE DISK;
RESTORE DATABASE;
RECOVER DATABASE;
}
VALIDATE で corruption 検出
修復:
RECOVER CORRUPTION LIST;
PostgreSQL からの移行
PG は pg_basebackup + WAL、Oracle RMAN は統合ツール、Data Guard との連携が強力。
よくある質問(FAQ)
Q1. Level 0 と Full の違い
- Level 0: 次の Level 1 の Parent
- Full: 独立、Parent にならない
Q2. Differential vs Cumulative
- Differential: 小サイズ、復旧複雑
- Cumulative: 大サイズ、復旧単純(推奨)
Q3. RECOVERY WINDOW vs REDUNDANCY
- RECOVERY WINDOW: 日数ベース(推奨)
- REDUNDANCY: 世代数ベース
Q4. COMPRESSION ライセンス
- BASIC: 無料
- LOW/MEDIUM/HIGH: Advanced Compression Option
Q5. FRA 推奨サイズ
DB サイズの 2-3 倍 + Archive 分。
Q6. Autoback CONTROLFILE
必ず ON、災害復旧の要。
Q7. Recovery Catalog
複数 DB 管理時推奨。
Q8. Autonomous DB
Oracle 管理、OCI Console 経由。
Q9. Rails 監視
v$backup_set で最終バックアップ確認。
Q10. Docker
volume mount で保管、host にコピー推奨。
Q11. Data Guard 併用
Standby から backup で本番負荷ゼロ。
Q12. 予防的検証
RESTORE DATABASE VALIDATE を週次実行。
参考リンク
Oracle 公式
- Oracle Database Backup and Recovery User’s Guide
- Oracle Database Backup and Recovery Reference
- RMAN Backup Concepts
- Fast Recovery Area Configuration
まとめ
Oracle RMAN の要点を再整理します。
RMAN の本質
Oracle 公式標準バックアップツール
- ブロック整合性自動チェック
- 増分バックアップ(Level 0/1)
- FRA 統合管理
- PITR 対応
- Data Guard シームレス
- 圧縮・暗号化統合
6 つの必須設定
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%d_%T_%U';
週次/日次戦略
週次(日曜 2:00): Level 0 + Archive + VALIDATE
日次(月〜土 2:00): Level 1 Cumulative + Archive DELETE INPUT
毎時(アーカイブ): 自動 archivelog
バックアップ種類
| 種類 | 用途 | サイズ |
|---|---|---|
| Full | 単発 | 100% |
| Level 0 | 週次基本 | 100% |
| Level 1 Cum | 日次 | 増分累積 |
| Level 1 Diff | 日次(小) | 直前増分 |
FRA 設計
サイズ = (Level 0) × 2 + (Level 1) × 14 + Archive × 14 + 20%
場所: 独立ディスク推奨(データファイルと別)
自動管理: retention policy が判定
PITR 実行
RUN {
SET UNTIL TIME "TO_DATE('YYYY-MM-DD HH24:MI:SS', ...)";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
日次実務ルーチン
# 日次
BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG DELETE INPUT;
CROSSCHECK BACKUP;
DELETE NOPROMPT OBSOLETE;
# 週次
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;
RESTORE DATABASE VALIDATE;
実務チェックリスト
□ CONFIGURE 完了(6 項目)
□ FRA 適切サイズ設定
□ Cron 日次/週次スクリプト
□ アーカイブログ削除方針
□ 定期 VALIDATE
□ 監視統合(Rails/Java/Python)
□ 障害訓練実施
□ Recovery Catalog(複数 DB)
□ Data Guard 連携(重要 DB)
□ Autonomous DB は Oracle 管理
これらの知識は、Oracle DBA の本番運用・障害復旧・DR 計画・データ保護・Rails/Java/Python アプリ運用・Cloud/Autonomous DB 運用・Data Guard 環境・監視設計・CI/CD パイプライン・SOX/PCI/HIPAA コンプライアンスなど、あらゆる場面で活用できます。本記事をブックマークしておけば、Oracle RMAN のプロフェッショナルとして本番運用を安心して任せられるようになります。
本記事は2026年6月時点の情報をもとに、Oracle Database 19c〜23ai での動作確認・公式ドキュメントに基づき作成しています。Oracle のバージョンにより挙動が異なる場合があるため、最新の情報は Oracle 公式ドキュメント(docs.oracle.com)もあわせてご確認ください。
-
前の記事
【完全ガイド】ORA-01407: cannot update … to NULL の原因と解決方法|相関サブクエリ・NVL 外側 vs 内側 徹底解説 2026.09.07
-
次の記事
【完全ガイド】Oracle Data Guard 完全ガイド|Physical Standby・Protection Mode・DGMGRL・FSFO 徹底解説 2026.09.08
コメントを書く