Oracleデータベースの運用において、ディスク障害や誤操作によるデータ損失はいつでも起こり得ます。
そんな「いざという時」に頼れるのが、Oracle標準のバックアップ・リカバリツール「RMAN(Recovery Manager)」です。
この記事では、実際に障害が発生した直後に行う、完全リカバリ(Complete Recovery)の一連の手順を、図解・補足付きでわかりやすく解説します。
バックアップ手順についてはコチラ。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ この記事の想定シナリオ
- データファイルが破損した
- 誤って重要なデータを削除した
- ディスク障害でOracleが起動しなくなった
そんな場合に、RMANで取得しておいたバックアップを使って、障害直前の状態に戻すことが目的です。
📌 事前に必要な準備(※必ず実施しておくこと)
完全リカバリが可能となるには、以下の条件が整っている必要があります。
┌──────────────────────────────┐
│ 完全リカバリの前提条件 │
├──────────────────────────────┤
│ ✔ アーカイブログモードが有効 │
│ ✔ RMANで定期的にフルバックアップを取得 │
│ ✔ アーカイブログがバックアップ以降すべて保持│
└──────────────────────────────┘
🔍 バックアップがない場合、RMANでの復旧は不可能です。事前に運用設計しておきましょう。
🔧【障害発生時】RMANで完全リカバリを行う手順
以下は、RMANを使って障害直前まで復旧する流れです。SCNや時刻を指定せず、「できる限り最新の状態」まで戻すのが完全リカバリです。
┌─────────────────────────────┐
│ 障害発生時の完全リカバリ手順 │
├────────────┬────────────────┤
│ ① RMAN接続 │ ターゲットDBへ接続 │
│ ② MOUNTモード起動 │ 復旧のためにマウント状態にする │
│ ③ リストア │ バックアップからデータファイル復元 │
│ ④ リカバリ │ アーカイブログ&REDOログを適用 │
│ ⑤ データベースOPEN │ 通常モードで起動(RESETLOGS不要) │
└────────────┴────────────────┘
🛠️ 実行コマンド(障害直後に実施)
① RMANへ接続
$ rman target /
② データベースをMOUNTモードで起動
STARTUP MOUNT;
🔍 障害によりファイルが失われているため、OPENはせずMOUNTから開始します。
③ バックアップからリストア(復元)
RESTORE DATABASE;
→ RMANで事前に取得したバックアップから、データファイルを元の場所に復元します。
④ 完全リカバリの実行
RECOVER DATABASE;
→ バックアップ後のアーカイブログ・REDOログを自動で適用し、障害直前の状態まで復元します。
⑤ データベースをOPEN(RESETLOGS不要)
ALTER DATABASE OPEN;
→ 完全リカバリではREDOログの整合性が保たれており、RESETLOGSは不要です。
SQL> select count(*) from test1.test_tab1; ★障害発生
select * from test1.test_tab1
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> shutdown immediate ★シャットダウンでエラーが発生
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> shutdown abort ★abort で停止
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@orcl19c ~]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Sun Aug 3 00:45:55 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN> startup mount ★mount で起動
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 03-AUG-25
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 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 00005 to /u01/app/oracle/oradata/ORCL/test_tbs.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/ORCL/users01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/19.0.0/dbhome_1/dbs/024058n0_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/024058n0_1_1 tag=TAG20250803T001840
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
Finished restore at 03-AUG-25
RMAN> recover database; ★リカバリ
Starting recover at 03-AUG-25
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 7 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_7_1206875490.dbf
archived log for thread 1 with sequence 8 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_8_1206875490.dbf
archived log for thread 1 with sequence 9 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_9_1206875490.dbf
archived log for thread 1 with sequence 10 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_10_1206875490.dbf
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
media recovery complete, elapsed time: 00:00:03
Finished recover at 03-AUG-25
RMAN> alter database open; ★オープン
Statement processed
RMAN> select status from v$instance;
STATUS
------------
OPEN
RMAN> select count(*) from test1.test_tab1; ★select できた
COUNT(*)
----------
55552
📘 補足:RESETLOGSとは何か?
RESETLOGS は、REDOログの履歴を初期化して「新たなリカバリ開始点」を作成する処理です。
| リカバリ種別 | RESETLOGSの必要性 | 理由 |
|---|---|---|
| 完全リカバリ | ❌ 不要 | ログ整合性が保たれており、過去ログの続きで稼働可能 |
| 不完全リカバリ | ✅ 必要 | ログの整合性が崩れるため、新たな起点が必要 |
✅ 完全リカバリでは
ALTER DATABASE OPEN;でそのまま起動すればOKです。
⚠️ リカバリ前のチェックポイント
- ✅ バックアップが存在するか?
- ✅ アーカイブログがすべて残っているか?
- ✅ FRAの容量が足りているか?
- ✅ アーカイブログやREDOログにアクセスできるか?
✅ まとめ:完全リカバリは「備え」と「冷静な対応」が鍵
┌────────────────────────────┐
│ 完全リカバリで得られる安心感 │
├────────────────────────────┤
│ ✔ 障害直前の最新状態まで復旧可能 │
│ ✔ データ損失なしで迅速にサービス再開可能 │
│ ✔ RESETLOGS不要で運用に影響が少ない │
└────────────────────────────┘
しかし、この手順は障害が起きた「そのとき」にすぐ行えるよう、
日ごろから以下を実施しておくことが最重要です。
┌────────────────────────────┐
│ 日頃からやるべきこと(予防策) │
├────────────────────────────┤
│ ✔ 定期的なRMANバックアップの取得 │
│ ✔ アーカイブログの確実な保存と監視 │
│ ✔ リカバリ手順の社内共有・マニュアル整備 │
└────────────────────────────┘
障害対応は「手順を知っているか」ではなく「準備していたか」が明暗を分けます。
[参考]
バックアップおよびリカバリ・リファレンス – 3.7 RESTORE
バックアップおよびリカバリ・リファレンス – 3.1 RECOVER




コメント