【Oracle】RMAN で表領域単位のバックアップを取得する方法|BACKUP TABLESPACE・増分・圧縮・スケジュール・リストアまで解説

【Oracle】RMAN で表領域単位のバックアップを取得する方法|BACKUP TABLESPACE・増分・圧縮・スケジュール・リストアまで解説 Oracle

RMAN ではデータベース全体だけでなく、特定の表領域だけをバックアップすることができます。変更頻度の高い表領域を頻繁にバックアップし、静的な表領域は低頻度にする差別化バックアップ戦略を実現できます。

本記事では、BACKUP TABLESPACE の基本構文、増分バックアップとの組み合わせ圧縮・暗号化・パラレル表領域バックアップからのリストアまで解説します。

この記事でわかること
・BACKUP TABLESPACE の基本構文
・複数表領域の同時バックアップ
・増分バックアップ(LEVEL 0 / 1)との組み合わせ
・圧縮 / 暗号化 / パラレルとの組み合わせ
・表領域バックアップからのリストア手順
・フルバックアップとの使い分け
・スケジュール化のスクリプト例
スポンサーリンク

表領域単位でバックアップするメリット

メリット 説明
バックアップ時間の短縮 変更頻度の高い表領域だけ頻繁にバックアップし、静的な表領域は低頻度にできる
ストレージの節約 不要な表領域(TEMP 等)をバックアップ対象から除外
運用の柔軟性 表領域ごとに異なるスケジュールを設定可能
部分リストアが高速 特定の表領域だけ復旧すれば済む場合、全体リストアより速い
TEMP 表領域はバックアップ不要
TEMP 表領域は一時データのみを格納するため、RMAN のバックアップ対象外です。破損時は TEMPFILE を DROP + 再作成するだけで復旧できます。UNDO 表領域も AUTOEXTEND で自動再生成されるため、バックアップの優先度は低いです。

BACKUP TABLESPACE の基本構文

Shell(単一表領域のバックアップ)
rman target /

# 特定の表領域をバックアップ
RMAN> BACKUP TABLESPACE users;

# アーカイブログも含める
RMAN> BACKUP TABLESPACE users PLUS ARCHIVELOG;

# バックアップ先のフォーマットを指定
RMAN> BACKUP TABLESPACE users
      FORMAT '/oracle/backup/users_%U.bkp';
Shell(複数表領域を同時にバックアップ)
# 複数表領域をカンマ区切りで指定
RMAN> BACKUP TABLESPACE users, app_data, app_index;

# アーカイブログ + 制御ファイルも含める
RMAN> BACKUP TABLESPACE users, app_data
      PLUS ARCHIVELOG DELETE INPUT;

増分バックアップとの組み合わせ

Shell(表領域の増分バックアップ)
# LEVEL 0(ベース: 全ブロック)
RMAN> BACKUP INCREMENTAL LEVEL 0 TABLESPACE users;

# LEVEL 1 差分(前回 LEVEL 0/1 以降の変更ブロックのみ)
RMAN> BACKUP INCREMENTAL LEVEL 1 TABLESPACE users;

# LEVEL 1 累積(前回 LEVEL 0 以降の全変更ブロック)
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE TABLESPACE users;
組み合わせ 用途
LEVEL 0 + 日次 LEVEL 1 週次フルベース + 日次増分(最も一般的)
LEVEL 0 + 日次 LEVEL 1 CUMULATIVE リストア速度を重視(最新 LEVEL 1 だけで復旧可能)
BACKUP TABLESPACE(非増分) 特定表領域の臨時バックアップ(ALTER TABLE 前のスナップショット等)

増分バックアップの詳細は「RMAN 増分バックアップ完全ガイド」を参照してください。

圧縮 / 暗号化 / パラレルとの組み合わせ

Shell(圧縮 + パラレル)
# 圧縮バックアップ(ファイルサイズ削減)
RMAN> BACKUP AS COMPRESSED BACKUPSET
      TABLESPACE users, app_data
      PLUS ARCHIVELOG DELETE INPUT;

# パラレル実行
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
RMAN> BACKUP TABLESPACE users, app_data;
Shell(暗号化)
# パスワード暗号化
RMAN> SET ENCRYPTION ON IDENTIFIED BY 'backup_pass' ONLY;
RMAN> BACKUP AS COMPRESSED BACKUPSET
      TABLESPACE users, app_data;

暗号化の詳細は「Data Pump でダンプファイルを暗号化する方法」を参照してください。

バックアップすべき表領域とバックアップ不要な表領域

表領域 バックアップ 理由
SYSTEM 必須 データディクショナリを格納。消失すると DB 起動不可
SYSAUX 必須 AWR / EM 等のシステムコンポーネントを格納
ユーザー表領域(USERS / APP_DATA 等) 必須 業務データを格納
INDEX 表領域 推奨(ただし再構築可能) バックアップから除外してREBUILD で復旧も可能
UNDO 推奨 Point-in-Time リカバリに必要
TEMP 不要 一時データのみ。DROP + 再作成で復旧
INDEX 表領域はバックアップから除外する選択肢もある
インデックスは DDL があれば再構築(REBUILD)できるため、バックアップから除外してリストア時間を短縮する戦略もあります。ただしインデックスの再構築には時間がかかるため、RTO(目標復旧時間)に応じて判断してください。

特定表領域を除外してバックアップする

Shell(特定表領域を除外)
# TEMP と INDEX 表領域を除外してフルバックアップ
RMAN> CONFIGURE EXCLUDE FOR TABLESPACE temp;
RMAN> CONFIGURE EXCLUDE FOR TABLESPACE app_index;

# BACKUP DATABASE で除外設定が適用される
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
# → temp と app_index は自動的にスキップ

# 除外設定の確認
RMAN> SHOW EXCLUDE;

# 除外設定の解除
RMAN> CONFIGURE EXCLUDE FOR TABLESPACE app_index CLEAR;
SYSTEM / SYSAUX は除外しない
SYSTEM / SYSAUX を除外すると DB 全体のリストアができなくなります。CONFIGURE EXCLUDE は TEMP や INDEX 専用表領域など、再構築可能な表領域にのみ使用してください。

表領域バックアップの確認

Shell(バックアップの確認コマンド)
# 表領域ごとのバックアップ一覧
RMAN> LIST BACKUP OF TABLESPACE users;

# 全表領域のバックアップ概要
RMAN> LIST BACKUP SUMMARY;

# バックアップの有効性を検証
RMAN> RESTORE TABLESPACE users VALIDATE;

# 不要なバックアップの削除
RMAN> DELETE NOPROMPT OBSOLETE;
SQL(表領域のバックアップ履歴を SQL で確認)
-- 表領域別の最新バックアップ日時
SELECT file#, name, tablespace_name,
       TO_CHAR(MAX(completion_time), 'YYYY-MM-DD HH24:MI') AS last_backup
FROM v$backup_datafile bdf
JOIN v$datafile df ON bdf.file# = df.file#
GROUP BY file#, name, tablespace_name
ORDER BY last_backup;

表領域バックアップからのリストア

Shell(表領域の部分リストア)
rman target /

# (1) 対象表領域を OFFLINE にする
RMAN> SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';

# (2) 表領域をリストア
RMAN> RESTORE TABLESPACE users;

# (3) リカバリ(アーカイブログで最新状態に復旧)
RMAN> RECOVER TABLESPACE users;

# (4) ONLINE に戻す
RMAN> SQL 'ALTER TABLESPACE users ONLINE';

# DB 全体を停止する必要がない(他の表領域は稼働中)

表領域リストアの詳細は「RMAN で特定の表領域だけを復元する方法」を参照してください。

BACKUP DATABASE と BACKUP TABLESPACE の使い分け

項目 BACKUP DATABASE BACKUP TABLESPACE
対象 DB 全体(全データファイル) 指定した表領域のみ
バックアップ時間 長い 短い
ストレージ使用量 大きい 小さい
リストア DB 全体または部分 表領域単位
適するケース 週次フルバックアップ 高頻度な表領域の日次バックアップ
注意点 SYSTEM / SYSAUX も別途バックアップが必要
よくある組み合わせ戦略
週次: BACKUP DATABASE(フルバックアップ)
日次: BACKUP TABLESPACE users, app_data(変更の多い表領域のみ増分)
毎時: BACKUP ARCHIVELOG(アーカイブログのみ)
これにより、週次フルの間隔を長くしてもリカバリ可能な状態を維持できます。

バックアップのスケジュール化

Shell(表領域バックアップスクリプト)
#!/bin/bash
# ts_backup.sh: 特定表領域の日次バックアップ
export ORACLE_HOME=/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCL

rman target / <<EOF
BACKUP INCREMENTAL LEVEL 1
    TABLESPACE users, app_data, app_index
    PLUS ARCHIVELOG DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
EOF
Shell(cron 登録)
# 毎日 2:00 に表領域バックアップ
0 2 * * * /home/oracle/scripts/ts_backup.sh >> /home/oracle/logs/ts_backup.log 2>&1

# 日曜 1:00 にフルバックアップ(BACKUP DATABASE)
0 1 * * 0 /home/oracle/scripts/full_backup.sh >> /home/oracle/logs/full_backup.log 2>&1

バックアップ自動化の詳細は「RMAN バックアップを自動化する方法」を参照してください。

実務パターン集

パターン(1): ALTER TABLE MOVE 前の臨時バックアップ

Shell
# テーブル移動前に対象表領域のスナップショットを取得
rman target /
RMAN> BACKUP TABLESPACE users
      TAG 'BEFORE_MOVE_20260330'
      FORMAT '/oracle/backup/users_before_move_%U.bkp';

# 問題発生時は TAG を指定してリストア
-- RMAN> RESTORE TABLESPACE users FROM TAG 'BEFORE_MOVE_20260330';

パターン(2): 重要表領域だけ高頻度バックアップ

Shell
# 受注データの表領域を 6 時間ごとに増分バックアップ
rman target / <<EOF
BACKUP INCREMENTAL LEVEL 1
    TABLESPACE orders_data
    FORMAT '/oracle/backup/orders_%d_%T_%U.bkp';
EOF

# crontab: 0 */6 * * * ...

パターン(3): INDEX 表領域を除外してバックアップを高速化

Shell
# INDEX 表領域を除外設定
rman target /
RMAN> CONFIGURE EXCLUDE FOR TABLESPACE app_index;

# BACKUP DATABASE から app_index が自動除外される
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE
      PLUS ARCHIVELOG DELETE INPUT;

# リストア時はインデックスを REBUILD で再作成
-- ALTER INDEX idx REBUILD;

パターン(4): READ ONLY 表領域のバックアップ最適化

Shell
# READ ONLY 表領域は 1 回バックアップすれば十分
-- (変更されないためRETENTION POLICY で削除されない)
RMAN> BACKUP TABLESPACE archive_data;

# 以降の BACKUP DATABASE でもバックアップは取得されるが、
# 変更がないため増分バックアップではスキップされる

よくある質問

QBACKUP TABLESPACE だけで完全なリストアはできますか?
A表領域のリストアは可能ですが、DB 全体の復旧には SYSTEM / SYSAUX / UNDO / アーカイブログも必要です。BACKUP TABLESPACE のみでは DB 全体を復旧できません。定期的な BACKUP DATABASE も併用してください。
QTEMP 表領域もバックアップすべきですか?
A不要です。TEMP は一時データのみを格納するため、RMAN バックアップの対象外です。破損時は TEMPFILE を DROP + 再作成するだけで復旧できます。
QBACKUP TABLESPACE と BACKUP DATAFILE の違いは?
ABACKUP TABLESPACE は表領域名で指定し、その表領域内の全データファイルをバックアップします。BACKUP DATAFILE はファイル番号またはパスで指定し、特定のデータファイルだけをバックアップします。通常は TABLESPACE の方がシンプルです。
Q表領域バックアップ中に DML はブロックされますか?
Aブロックされません。RMAN のバックアップはオンライン(DB 稼働中)で実行でき、テーブルへの INSERT / UPDATE / DELETE は継続可能です。ARCHIVELOG モードが有効である必要があります。
QCONFIGURE EXCLUDE で除外した表領域を一時的にバックアップするには?
ABACKUP TABLESPACE ts_name で明示的に指定すれば、EXCLUDE 設定に関係なくバックアップされます。EXCLUDE はあくまで BACKUP DATABASE 時の自動除外であり、表領域を明示指定すれば無視されます。
QREAD ONLY 表領域は毎回バックアップする必要がありますか?
AREAD ONLY 表領域は変更されないため、1 回バックアップすれば十分です。増分バックアップ(LEVEL 1)では変更がないため自動的にスキップされます。READ WRITE に戻した場合は再度バックアップが必要です。

まとめ

RMAN 表領域バックアップの要点をまとめます。

やりたいこと コマンド
特定表領域のバックアップ BACKUP TABLESPACE users
複数表領域を同時にバックアップ BACKUP TABLESPACE users, app_data, app_index
表領域の増分バックアップ BACKUP INCREMENTAL LEVEL 1 TABLESPACE users
アーカイブログも含めて BACKUP TABLESPACE users PLUS ARCHIVELOG DELETE INPUT
特定表領域を BACKUP DATABASE から除外 CONFIGURE EXCLUDE FOR TABLESPACE ts_name
バックアップの確認 LIST BACKUP OF TABLESPACE users
表領域のリストア SQL ‘ALTER TABLESPACE ts OFFLINE’; RESTORE TABLESPACE ts; RECOVER TABLESPACE ts; SQL ‘ALTER TABLESPACE ts ONLINE’

増分バックアップは「RMAN 増分バックアップ完全ガイド」、表領域のリストアは「RMAN で特定の表領域だけを復元する方法」、バックアップの自動化は「RMAN バックアップを自動化する方法」も併せて参照してください。