Oracle データベースに障害が発生した際、適切なバックアップとアーカイブログを利用することで完全リカバリが可能です。本記事では、完全リカバリの手順について詳しく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 完全リカバリとは?
完全リカバリ(Complete Recovery)とは、データベースの障害発生時に、バックアップを使用して障害発生直前の状態まで復旧する手法です。アーカイブログモードで運用しているデータベースでは、REDOログとアーカイブログを適用することで、トランザクションの損失を最小限に抑えることができます。
完全リカバリの主な適用ケースは以下の通りです。
- ディスク障害によるデータファイルの損失
- 人為的ミスによるデータファイル削除や破損
- 障害によるデータベースのクラッシュ
2. 前提条件
完全リカバリを実施するための前提条件は以下のとおりです。
- アーカイブログモードで運用されていること
- 確認方法:
SELECT LOG_MODE FROM V$DATABASE; ARCHIVELOGであれば問題なし。NOARCHIVELOGの場合はアーカイブログモードに変更する必要あり。
- 確認方法:
- 最新のデータファイル、制御ファイル、REDOログのバックアップがあること
- バックアップの確認:
RMAN> LIST BACKUP;
- バックアップの確認:
- RMAN または SQL*Plus を使用してリカバリを実施できる環境であること
- RMAN を使用する場合、リカバリカタログを利用するとより詳細な情報を管理可能。
3. RMAN を使用した完全リカバリ手順
(1) データベースの障害を確認
まず、データベースの状態を確認します。
SELECT STATUS FROM V$INSTANCE;
MOUNTまたはSHUTDOWNしている場合は、リカバリが必要です。OPENの場合でもデータ破損がある場合はALTER DATABASE VALIDATEでチェック可能。
(2) データベースをマウントモードで起動
RMAN> STARTUP MOUNT;
(3) バックアップからデータファイルをリストア
RMAN> RESTORE DATABASE;
LIST BACKUPコマンドでバックアップが存在するか事前に確認- 特定のファイルだけリストアする場合:
RMAN> RESTORE TABLESPACE users;
(4) アーカイブログ適用(リカバリ)
RMAN> RECOVER DATABASE;
- 途中で適用できないログがある場合、適切なアーカイブログを手動で指定可能。
(5) データベースをオープン
RMAN> ALTER DATABASE OPEN;
RESETLOGSオプションを付与する必要がある場合:RMAN> ALTER DATABASE OPEN RESETLOGS;
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 ★起動した
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
4. SQL*Plus を使用した完全リカバリ手順
(1) データベースのマウント
STARTUP MOUNT;
(2) バックアップからデータファイルをリストア
cp /backup/oracle/datafile/* /u01/app/oracle/oradata/ORCL/
(3) アーカイブログ適用
RECOVER DATABASE;
- 適用可能なアーカイブログ一覧を表示:
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG;
(4) データベースをオープン
ALTER DATABASE OPEN;
5. トラブルシューティング
(1) バックアップが見つからない場合
- RMAN の
CROSSCHECK BACKUPを実行し、削除されたバックアップをリストアできるか確認。RMAN> CROSSCHECK BACKUP;
(2) アーカイブログが不足している場合
V$ARCHIVED_LOGを確認し、適用可能なログがあるかチェック。- 他のストレージに保存されているアーカイブログを手動で適用可能:
RMAN> CATALOG START WITH '/backup/archive_logs/';
(3) データベースがOPEN RESETLOGSを要求する場合
RESETLOGSを実行する前に、最新のバックアップを取得。RESETLOGS実行後は、以前のバックアップとアーカイブログは使用不可になるため注意。
6. まとめ
- 完全リカバリは、障害発生直前の状態まで復旧できる方法である
- アーカイブログモードで運用し、定期的なバックアップが必要
- RMAN を使用することで、効率的かつ確実なリカバリが可能
- 事前にリカバリ手順をテストし、障害時の対応を迅速に行えるようにすることが重要
データベース管理者は、障害発生時に迅速に対応できるよう、日常的なバックアップ運用とリカバリ手順の習得が不可欠です。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント