Oracleデータベースの完全リカバリ手順:RMANによる復旧フロー

Oracle Master Gold

Oracleデータベースに障害が発生した際、適切なバックアップとアーカイブログを利用することで、障害直前の状態まで戻す「完全リカバリ」が可能です。本記事では、Oracle Database 19cにおけるRMANを活用した完全リカバリの手順を詳しく解説します。

指定した時点にリストア、リカバリする方法
Oracle Databaseにおいて DROP TABLE … PURGE を実行してしまった場合、リサイクルビン(RECYCLEBIN)を経由しないため、FLASHBACKでは復旧できません。しかし、RMANの「不完全リカバリ(時点…

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

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


1. 完全リカバリとは?

完全リカバリ(Complete Recovery)とは、バックアップファイルとアーカイブログ(REDOログの履歴)を適用し、トランザクションの損失なしにデータベースを障害直前の状態まで復旧する手法です。

主な適用ケース

  • ディスク障害によるデータファイルの損失
  • 人為的なデータファイル削除や破損
  • システム障害によるデータベースのクラッシュ

2. 前提条件と確認事項

リカバリを実行する前に、以下の環境が整っているか確認してください。

アーカイブログモードの確認

完全リカバリには、アーカイブログモードでの運用が必須です。

SELECT LOG_MODE FROM V$DATABASE;

ARCHIVELOG と表示されれば問題ありません。

バックアップの確認

リストア可能なバックアップが存在するか確認します。

RMAN> LIST BACKUP;

3. RMAN を使用した完全リカバリ手順

障害発生時、RMANを使用してデータベースを復旧させる一連の流れです。

ステップ1: データベースの状態確認と停止

障害発生時にデータベースを安全に停止します。

-- 状態確認
SELECT STATUS FROM V$INSTANCE;

-- 障害等でOPENできない場合は強制終了
SHUTDOWN ABORT

ステップ2: マウントモードで起動

RMANを起動し、マウントモードでデータベースをマウントします。

[oracle@v19single ~]$ rman target /

RMAN> STARTUP MOUNT

ステップ3: データファイルのリストア

バックアップファイルを使用して、破損したデータファイルを本来の場所へ書き戻します。

RMAN> RESTORE DATABASE;

ステップ4: アーカイブログ適用(メディアリカバリ)

リストアしたデータファイルに対し、アーカイブログを適用して障害発生時点までロールフォワードします。

RMAN> RECOVER DATABASE;
SQL> shu immediate
ORA-01116: データベース・ファイル7のオープンでエラーが発生しました。 ★障害発生
ORA-01110: データファイル7: '/u01/app/oracle/oradata/V19/users01.dbf'
ORA-27041: ファイルをオープンできません
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

SQL> shu abort ★強制停止
ORACLEインスタンスがシャットダウンされました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on 月 3月 10 23:31:33 2025
Version 19.21.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

ターゲット・データベースに接続しました(起動していません)。

RMAN> startup mount ★マウントで起動

Oracleインスタンスが起動しました
データベースがマウントされました。

システム・グローバル領域の合計は、 1543500120バイトです。

Fixed Size 8925528バイト
Variable Size 889192448バイト
Database Buffers 637534208バイト
Redo Buffers 7847936バイト

RMAN> restore database; ★リストア

restoreを25-03-10で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=37 デバイス・タイプ=DISK

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00001を/u01/app/oracle/oradata/V19/system01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00003を/u01/app/oracle/oradata/V19/sysaux01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00004を/u01/app/oracle/oradata/V19/undotbs01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00007を/u01/app/oracle/oradata/V19/users01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013k1ijc_1_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013k1ijc_1_1_1 タグ=TAG20250310T232740
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:15
restoreを25-03-10で終了しました

RMAN> recover database; ★リカバリ

recoverを25-03-10で開始しています
チャネルORA_DISK_1の使用

メディア・リカバリを開始しています

スレッド1 (順序12)のアーカイブ・ログは、ファイル/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_12_1153872185.dbfとしてディスクにすでに存在します
スレッド1 (順序13)のアーカイブ・ログは、ファイル/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_13_1153872185.dbfとしてディスクにすでに存在します
スレッド1 (順序14)のアーカイブ・ログは、ファイル/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_14_1153872185.dbfとしてディスクにすでに存在します
アーカイブ・ログ・ファイル名=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_12_1153872185.dbf スレッド=1 順序=12
メディア・リカバリが完了しました。経過時間: 00:00:00
recoverを25-03-10で終了しました

RMAN> alter database open;

文が処理されました

RMAN> select status from v$instance;

STATUS
------------
OPEN ★起動した

ステップ5: データベースのオープン

リカバリが完了したら、データベースをオープンします。

RMAN> ALTER DATABASE OPEN;

-- 確認
RMAN> SELECT STATUS FROM V$INSTANCE;

4. SQL*Plus を使用した手動リカバリ(参考)

RMANが使用できない環境等で、物理的にファイルをコピーした場合のリカバリ手順です。

  1. マウント: STARTUP MOUNT
  2. ファイル復元: OSコマンド(cp等)でバックアップからデータファイルを配置
  3. リカバリ実行: RECOVER DATABASE;
  4. DBオープン: ALTER DATABASE OPEN;

5. トラブルシューティング

リカバリ中にエラーが発生した場合の対応策です。

  • バックアップが見つからない場合: CROSSCHECK BACKUP; を実行し、バックアップセットの整合性を再確認します。
  • アーカイブログが不足している場合: 別の場所に退避したアーカイブログがあるなら、CATALOG START WITH '/path/to/archive/'; で認識させます。
  • OPEN RESETLOGSが必要な場合: インカネーションが変更されるため、ALTER DATABASE OPEN RESETLOGS; を実行します。実行後は直ちにフルバックアップを取得してください。

6. まとめ

完全リカバリを成功させるためのポイントは以下の通りです。

  • アーカイブログモード運用: リカバリの前提条件。
  • RMANの活用: 手動操作を減らし、確実なリカバリが可能。
  • 事前のテスト: 障害時の手順を習得しておくこと。

データベース管理者は、日常的なバックアップ取得と、リカバリ手順の定期的な検証を強く推奨します。

本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。


[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c

Oracle RMAN バックアップのやり方と基本コマンド
Oracle データベースの運用において、データの保護は最優先事項です。Oracle RMAN(Recovery Manager)は、効率的なOracle バックアップと迅速なリカバリを実現するための標準ツールです。本記事では、初心者から中…

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

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

コメント

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