Oracle Database を扱う上で避けて通れないのが Oracle バックアップ とリカバリの設計です。その中心的な役割を担うのが、Oracle標準のユーティリティである「RMAN(Recovery Manager)」です。
この記事では、RMANの仕組み・特徴・できること・使用例に加え、本番運用に必須となる「アーカイブログモード」への変更手順まで、初心者向けに図解と詳細なコマンド解説付きでわかりやすく解説します。「コマンドの意味がわからない」「SQL*Plusとの違いは?」といった疑問を解消しましょう。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
結論:RMANでできること(要約)
RMANを習得すると、以下の管理作業が標準コマンドで完結します。
- 統合管理: データファイル、制御ファイル、アーカイブログを一元管理。
- 効率化: 使用済みブロックのみをバックアップ(圧縮・高速化)。
- 安全性: バックアップ取得時の破損ブロック検知。
- 自動化: シェルスクリプト等と組み合わせた定型処理化。
1. RMANとは?仕組みと特徴
RMAN(Recovery Manager)とは、Oracleが標準で提供しているバックアップおよびリカバリ専用のコマンドラインツールです。
RMANの位置づけ
テキスト図で整理すると、以下のような位置づけになります。
┌──────────────┐
│ RMANの位置づけ │
├──────────────┤
│ Oracleが公式に提供する │
│ バックアップ/復旧ツール │
└──────────────┘
SQL*Plus とは異なり、RMANはデータファイルや制御ファイルなどを「物理ファイル単位」で効率的に扱えるほか、アーカイブログの管理や、リカバリ操作を自動化できるのが最大の特徴です。論理バックアップ(Data Pump / expdp)では対応できない「障害直前までの完全リカバリ」には RMAN が必須となります。
RMANの主な特徴とメリット
| 特徴 | 説明 |
|---|---|
| Oracle標準ツール | Oracleが公式に提供しており、追加ライセンス不要で使用可能。 |
| ブロックレベルのバックアップ | データが入っている「使用ブロック」のみをバックアップするため、容量と時間を節約可能。 |
| アーカイブログの管理 | バックアップ取得と同時に、不要になったアーカイブログを自動削除できる。 |
| 障害時の完全リカバリ | バックアップ+REDOログ・アーカイブログを使って、トランザクションを障害発生直前まで復旧可能。 |
| 自動スクリプト化 | 定期実行やOSのシェルスクリプトとの連携で運用を自動化しやすい。 |
| カタログによる履歴管理 | 「リカバリ・カタログ」を用いることで、長期的なバックアップ履歴の一元管理が可能。 |
RMANでできること
RMANひとつで、データベースの保全に必要なほぼ全ての操作が可能です。
- ✅ データベース全体のバックアップ
- ✅ データファイル単位のバックアップ
- ✅ アーカイブログのバックアップと削除
- ✅ 制御ファイル/SPFILEのバックアップ
- ✅ 不完全リカバリ(時点/SCN/ログシーケンス指定)
- ✅ バックアップデータの検証(VALIDATE)、リストア
2. 【必須設定】アーカイブログモードへの変更手順
RMANの機能をフル活用し、業務を止めずにバックアップ(オンラインバックアップ)を取るには、データベースを ARCHIVELOGモード に設定する必要があります。
デフォルト(NOARCHIVELOGモード)では、DB停止時しかバックアップが取れません。以下の手順で変更します。 ※注意: この作業にはデータベースの再起動が必要です。
手順1:現在のモードを確認
SQL*Plus で管理者として接続し、現状を確認します。
SQL> CONNECT / AS SYSDBA
SQL> SELECT LOG_MODE FROM V$DATABASE;
LOG_MODE
------------
NOARCHIVELOG
NOARCHIVELOG と表示された場合、変更が必要です。
手順2:データベースを停止してMOUNT状態で起動
設定変更のため、一度インスタンスを停止し、MOUNT状態(データファイルを開く手前)で起動します。
-- データベースを正常停止
SQL> SHUTDOWN IMMEDIATE
-- MOUNT状態で起動(設定変更のため)
SQL> STARTUP MOUNT
手順3:アーカイブログモードへ変更し、DBをオープン
モードを変更し、データベースを開きます。
-- アーカイブログモードへ変更
SQL> ALTER DATABASE ARCHIVELOG;
-- データベースをオープン(利用可能にする)
SQL> ALTER DATABASE OPEN;
手順4:変更結果の確認
再度モードを確認します。
SQL> SELECT LOG_MODE FROM V$DATABASE;
LOG_MODE
------------
ARCHIVELOG
「アーカイブ・モード」「有効」になっていれば設定完了です。これでRMANによるオンラインバックアップが可能になりました。
SQL> SELECT LOG_MODE FROM V$DATABASE;
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 1543500144 bytes
Fixed Size 8896880 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7876608 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> SELECT LOG_MODE FROM V$DATABASE;
LOG_MODE
------------
ARCHIVELOG ★
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
3. 実践:RMANによるバックアップ操作
ここでは実際のコマンド例とその 「意図・結果」 を詳しく解説します。
前提環境:
- OS: Oracle Linux / Windows
- ユーザー:
oracleユーザーでOSログイン済み - 接続先: ローカルデータベース(ORACLE_SID設定済み)
- バックアップ先ディレクトリ:
/backup(書込権限があること)
手順1:RMANへの接続
まず、OSのターミナルからRMANを起動し、ターゲットデータベースに接続します。
# OSコマンドラインから実行
$ rman target /
- 解説:
target /は「OS認証を使って、ローカルのターゲットデータベースに SYSDBA (またはSYSBACKUP) 権限で接続する」という意味です。パスワード入力を省略できます。 - 結果:
RMAN>プロンプトが表示され、入力待ち状態になります。
手順2:データベース全体のバックアップ
最も基本的な「データベース全体(データファイル+制御ファイル+SPFILE)」のバックアップです。
RMAN> BACKUP DATABASE FORMAT '/backup/backup_%U.bkp';
【コマンド解説】
BACKUP DATABASE: データベースを構成する全データファイルをバックアップします。設定により制御ファイルとSPFILEも自動的に含まれます。FORMAT '/backup/...': バックアップファイルの出力先と命名規則を指定します。%U: 重要。Oracleが自動生成する「一意のID(ユニーク文字列)」に置換されます。ファイル名の重複エラーを防ぐため、通常はこの指定を含めます。
【実行結果のイメージ】
- 指定ディレクトリにバックアップピース(物理ファイル)が作成されます。
- 「input datafile file number=00001 …」のように、処理されたファイルが表示されます。
[oracle@orcl19c ~]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Wed Jan 14 19:41:42 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1734656221)
RMAN> BACKUP DATABASE FORMAT '/backup/backup_%U.bkp'; ★
Starting backup at 14-JAN-26
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=71 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/ORCL/system01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/ORCL/sysaux01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/ORCL/undotbs01.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/ORCL/users01.dbf
channel ORA_DISK_1: starting piece 1 at 14-JAN-26
channel ORA_DISK_1: finished piece 1 at 14-JAN-26
piece handle=/backup/backup_014dt343_1_1.bkp tag=TAG20260114T194155 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:46
Finished backup at 14-JAN-26
Starting Control File and SPFILE Autobackup at 14-JAN-26
piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/c-1734656221-20260114-00 comment=NONE
Finished Control File and SPFILE Autobackup at 14-JAN-26
RMAN>
手順3:アーカイブログのバックアップと削除
増え続けるアーカイブログをバックアップし、ディスク圧迫を防ぐために完了分を削除します。
RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
【コマンド解説】
BACKUP ARCHIVELOG ALL: ディスク上にある全てのアーカイブログファイルをバックアップ対象にします。DELETE INPUT: 重要。バックアップが無事に完了したら、元のアーカイブログファイルをディスクから削除します。これによりディスク容量枯渇を防ぎます。
RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT; ★
Starting backup at 14-JAN-26
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=6 RECID=1 STAMP=1222544601
input archived log thread=1 sequence=7 RECID=2 STAMP=1222544614
input archived log thread=1 sequence=8 RECID=3 STAMP=1222544614
input archived log thread=1 sequence=9 RECID=4 STAMP=1222544617
input archived log thread=1 sequence=10 RECID=5 STAMP=1222544622
input archived log thread=1 sequence=11 RECID=6 STAMP=1222544643
channel ORA_DISK_1: starting piece 1 at 14-JAN-26
channel ORA_DISK_1: finished piece 1 at 14-JAN-26
piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/034dt383_1_1 tag=TAG20260114T194403 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_6_1206875490.dbf RECID=1 STAMP=1222544601
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_7_1206875490.dbf RECID=2 STAMP=1222544614
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_8_1206875490.dbf RECID=3 STAMP=1222544614
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_9_1206875490.dbf RECID=4 STAMP=1222544617
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_10_1206875490.dbf RECID=5 STAMP=1222544622
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_11_1206875490.dbf RECID=6 STAMP=1222544643
Finished backup at 14-JAN-26
Starting Control File and SPFILE Autobackup at 14-JAN-26
piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/c-1734656221-20260114-01 comment=NONE
Finished Control File and SPFILE Autobackup at 14-JAN-26
RMAN>
手順4:制御ファイルの明示的なバックアップ
制御ファイル(Control File)はDBの構成情報を管理する命綱です。単独でバックアップする場合は以下を実行します。
RMAN> BACKUP CURRENT CONTROLFILE;
RMAN> BACKUP CURRENT CONTROLFILE; ★
Starting backup at 14-JAN-26
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 14-JAN-26
channel ORA_DISK_1: finished piece 1 at 14-JAN-26
piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/054dt38n_1_1 tag=TAG20260114T194423 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 14-JAN-26
Starting Control File and SPFILE Autobackup at 14-JAN-26
piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/c-1734656221-20260114-02 comment=NONE
Finished Control File and SPFILE Autobackup at 14-JAN-26
RMAN>
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
4. 実践:RMANによるリカバリの流れ
障害発生時(データファイル消失など)の復旧手順です。
リカバリの基本フロー
┌──────────────┐
│ RMANリカバリの流れ │
├──────────────┤
│① バックアップをリストア │ データファイルをバックアップから書き戻す
│② アーカイブログを適用 │ REDOログを適用し、最新状態へ進める(ロールフォワード)
│③ データベースをオープン │ 整合性が取れた状態でDBを開く
└──────────────┘
実行例:データベース全体の完全リカバリ
データベースが起動できない(MOUNT状態までしか上がらない)深刻な障害を想定した手順です。
-- 1. データベースをマウント状態にする(起動していない場合)
RMAN> STARTUP MOUNT;
-- 2. バックアップからファイルを書き戻す
RMAN> RESTORE DATABASE;
-- 3. アーカイブログ/REDOログを適用して最新状態にする
RMAN> RECOVER DATABASE;
-- 4. データベースを通常オープンする
RMAN> ALTER DATABASE OPEN;
【コマンド解説】
RESTORE DATABASE: バックアップセットから物理ファイルを元の位置(または指定位置)にコピーします。あくまで「過去の時点のファイル」を置くだけです。RECOVER DATABASE: RESTOREされた古いファイルに対し、差分データ(アーカイブログ、REDOログ)を順次適用(ロールフォワード)し、障害発生直前の最新状態までデータを更新します。ALTER DATABASE OPEN: データ間の整合性が確認された後、ユーザーがアクセスできるようにデータベースを開きます。
RMAN> STARTUP MOUNT
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 1543500144 bytes
Fixed Size 8896880 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7876608 bytes
RMAN> RESTORE DATABASE; ★
Starting restore at 14-JAN-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=39 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/ORCL/system01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/ORCL/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/ORCL/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/ORCL/users01.dbf
channel ORA_DISK_1: reading from backup piece /backup/backup_014dt343_1_1.bkp
channel ORA_DISK_1: piece handle=/backup/backup_014dt343_1_1.bkp tag=TAG20260114T194155
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:06
Finished restore at 14-JAN-26
RMAN> RECOVER DATABASE; ★
Starting recover at 14-JAN-26
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 12 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_12_1206875490.dbf
archived log for thread 1 with sequence 13 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_13_1206875490.dbf
archived log for thread 1 with sequence 14 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_14_1206875490.dbf
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=6
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=7
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=8
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=10
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=11
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/19.0.0/dbhome_1/dbs/034dt383_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/034dt383_1_1 tag=TAG20260114T194403
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_6_1206875490.dbf thread=1 sequence=6
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_7_1206875490.dbf thread=1 sequence=7
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_8_1206875490.dbf thread=1 sequence=8
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_9_1206875490.dbf thread=1 sequence=9
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_10_1206875490.dbf thread=1 sequence=10
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_11_1206875490.dbf thread=1 sequence=11
archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_12_1206875490.dbf thread=1 sequence=12
media recovery complete, elapsed time: 00:00:01
Finished recover at 14-JAN-26
RMAN> ALTER DATABASE OPEN;
Statement processed
RMAN> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
OPEN ★
RMAN>
5. RMANの基本構成とカタログの活用
RMANは「いつバックアップを取ったか」という履歴情報を管理しています。
┌─────────────┐
│ RMAN情報の保存場所 │
├─────────────┤
│ ・制御ファイル │ (デフォルト) DB自身の制御ファイル内に履歴を持つ
│ ・リカバリ・カタログ(任意) │ 別のDB上の専用スキーマに履歴を保存する
└─────────────┘
小規模環境ではデフォルト(制御ファイル管理)で十分ですが、リカバリ・カタログを使うと、ターゲットDBの制御ファイルごと消失した場合でも履歴情報が残るため、復旧の手がかりを失わずに済みます。大規模・高信頼性が求められるシステムではカタログの利用を検討してください。
6. トラブルシューティング(よくあるエラー)
RMAN操作中によく遭遇するエラーと対処法です。
| エラーコード | 原因 | 対処 |
|---|---|---|
| ORA-19504 | 指定したバックアップ先のパスが存在しない、または書き込み権限がない。 | OS側でディレクトリを作成(mkdir)し、chown等で権限を付与する。 |
| ORA-01031 | insufficient privileges(権限不足)。 | oracleユーザーで実行しているか確認。sqlnet.oraの認証設定を確認する。 |
| ORA-19602 | ARCHIVELOGモードでないのにオンラインバックアップを試みた。 | DBを停止してMOUNT状態で取るか、第2章の手順でARCHIVELOGモードに変更する。 |
7. 運用・監視・セキュリティ上の注意
- ディスク容量の監視: バックアップ先や高速リカバリ領域(FRA)が満杯になると、DB自体が停止することがあります。
DELETE INPUTオプションの活用や、古いバックアップを削除するDELETE OBSOLETEコマンドを定期的に実行してください。 - パスワードファイル: RMANのリモート接続にはパスワードファイルが必要です。再作成時は
orapwdコマンドを使用します。 - 暗号化: 本番データのバックアップファイルは、そのまま盗まれるとデータを復元できてしまいます。セキュリティ要件が高い場合は RMAN の暗号化機能(Enterprise Edition オプション等が必要な場合あり)を検討してください。
8. FAQ(よくある質問)
Q1. SQL*Plusコマンドとの違いは何ですか?
A. SQLPlusは主にデータの操作や管理を行いますが、物理ファイルのバックアップ機能は弱いです(BEGIN BACKUP等は旧式の手法)。RMANはバックアップ専用に設計されており、ブロック破損の検知、圧縮、増分バックアップなど、SQLPlusでは不可能な高度な管理が可能です。
Q2. Data Pump (expdp) との違いは?
A. Data Pumpは「論理バックアップ(データの抜き出し)」です。特定のテーブルだけ戻すには便利ですが、データベース全体を障害直前の状態に戻す(完全リカバリ)には不向きです。システム保護には必ずRMAN(物理バックアップ)を使用し、Data Pumpは補助的に使うのが一般的です。
Q3. 「DELETE INPUT」を忘れるとどうなりますか?
A. アーカイブログがディスク上に残り続けます。ディスクが一杯になるとデータベースが更新できなくなり、システムが停止します。定期的に削除する運用(またはFRAの自動削除機能)が必要です。
まとめ:RMANはOracle運用の必須スキル!
RMANは、Oracleデータベースを安全かつ効率的に運用するために欠かせないバックアップ&リカバリの基幹ツールです。最初はコマンドライン操作に戸惑うかもしれませんが、基本コマンドはシンプルです。
RMANを使うメリットまとめ
- ✔ 安全: 整合性の取れたバックアップを確実に取得できる。
- ✔ 迅速: 必要なブロックのみをバックアップ・リストアできる。
- ✔ 自動化: スクリプト化により運用負荷を軽減できる。
- ✔ 管理: 履歴管理により、いつの時点に戻せるかが明確になる。
今後の記事では、より実践的な「増分バックアップ」の設定や、「高速リカバリ領域(FRA)」の活用法についても紹介していきます。ぜひブックマークして学習を進めてください!
Note: 本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
バックアップおよびリカバリ・ユーザーズ・ガイド – 2 RMANの概要
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?



コメント