RMANで障害直前まで完全リカバリする方法

Oracle Master Bronze

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

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました