Oracleデータベースに障害が発生した際、適切なバックアップとアーカイブログを利用することで、障害直前の状態まで戻す「完全リカバリ」が可能です。本記事では、Oracle Database 19cにおける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が使用できない環境等で、物理的にファイルをコピーした場合のリカバリ手順です。
- マウント:
STARTUP MOUNT - ファイル復元: OSコマンド(
cp等)でバックアップからデータファイルを配置 - リカバリ実行:
RECOVER DATABASE; - 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

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


コメント