【完全ガイド】Oracle RMAN バックアップ完全ガイド|Level 0/1・FRA・リテンション・PITR 徹底解説

【完全ガイド】Oracle RMAN バックアップ完全ガイド|Level 0/1・FRA・リテンション・PITR 徹底解説

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 ログ、アーカイブログの
  完全性を保証し、任意時点への復旧を可能にする」
目次

なぜ 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;

動作:

  1. 現在の REDO を Archive
  2. Datafile バックアップ
  3. Archive を含めてバックアップ
  4. 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 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)もあわせてご確認ください。