Oracle Databaseのバックアップとリカバリー

 


✅ Oracle Databaseのバックアップとリカバリー


🔷 1. 想定される障害と対処

種類説明対応方法
ステートメント障害単一SQL(SELECT/INSERTなど)が失敗特に問題なければ放置、必要なら権限や構文を見直す
ユーザープロセス障害セッションが異常終了通常はDBA介入不要だが、頻発時は調査
ネットワーク障害接続切れやリスナー停止など冗長化(複数NIC、Backupリスナー)で対応
人的ミステーブル削除や誤データ入力コミット前はROLLBACK、後はRMANやFlashbackで対応
インスタンス障害サーバ・プロセス異常停止自動リカバリ(REDOログ適用)+調査必要
データ障害データファイル欠損、破損バックアップから復旧+設定見直し
ディスク障害ストレージ自体の損傷RMANによる復旧が必要
データセンター全体の障害災害や停電で拠点全体停止Oracle Data Guard で他拠点に待機系構築

🔷 2. データ保護のための基本設定

✅ Fast Recovery Area(FRA)

  • バックアップやアーカイブログを集中管理する専用領域。

  • 設定すべきパラメータ

    • DB_RECOVERY_FILE_DEST: 保存先パス

    • DB_RECOVERY_FILE_DEST_SIZE: 使用可能サイズ(例:10GB)

  • 容量不足になるとDB停止の危険 → 監視が重要

  • モニタ用ビュー:

    • V$RECOVERY_FILE_DEST

    • V$RECOVERY_AREA_USAGE


🔷 3. コントロールファイルの多重化(Multiplex)

  • コントロールファイルはDB構造を定義する重要ファイル。

  • 最低でも2つ以上のコピーを異なるディスクに保存。

  • バックアップコマンド:

    sql
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

🔷 4. REDOログの多重化とアーカイブログ

✅ REDOロググループ

  • トランザクションの記録用ログ。

  • グループごとに2ファイル以上で構成するのが望ましい(ミラーリング)。

  • ALTER DATABASE ADD LOGFILE MEMBER で追加可能。

  • V$LOGV$LOGFILEで状態確認。

  • 手動ログスイッチで新メンバーを有効化。

✅ アーカイブログモード

  • 過去のREDOログをアーカイブ(保存)し、リカバリ時に使用可能。

  • **Point-in-Time Recovery(特定時点復旧)**が可能になる。

  • 常にON推奨。


🔷 5. Oracle Recovery Manager(RMAN)の概要

機能内容
バックアップ管理フル/増分バックアップ、部分バックアップなど
ストレージ対応ディスク/テープ両対応(テープはMedia Management Libraryが必要)
パフォーマンス並列処理、重複排除、圧縮などに対応
コマンドラインrman target / で接続、SHOW ALL で設定確認

🔷 6. バックアップの種類

種類内容特徴
フルバックアップ全データブロックをバックアップ復旧が簡単
増分バックアップ変更されたデータブロックのみLevel 0(初回)/Level 1(差分or累積)
📌 増分バックアップの詳細
レベル対象コマンド例
Level 0フルバックアップと同じBACKUP INCREMENTAL LEVEL 0 DATABASE
Level 1(差分)直近の増分以降の変更分BACKUP INCREMENTAL LEVEL 1 DATABASE
Level 1(累積)直近のLevel 0以降の変更分BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE

🔷 7. バックアップ形式

種類説明特徴
Backup Setsデータが圧縮されるOracle独自形式空ブロックを保存しない=省スペース
Image CopiesOSレベルのコピー(バイト単位)復旧が高速/サイズが大きい

🔷 8. RMANの設定パラメータ例(SHOW ALL

パラメータ意味
RETENTION POLICY TO REDUNDANCY 1同一バックアップ1世代を保持
BACKUP OPTIMIZATION ON重複ファイルのバックアップをスキップ
DEFAULT DEVICE TYPE TO DISKディスク保存をデフォルトに
CONTROLFILE AUTOBACKUP ONコントロールファイル自動バックアップ
MAXSETSIZEバックアップセットの最大サイズ
COMPRESSION ALGORITHM BASIC圧縮アルゴリズムの設定
ARCHIVELOG DELETION POLICY TO NONEアーカイブログの削除ポリシーなし(全保存)

Oracleデータベースの完全バックアップの方法

1. 基本的なバックアップコマンド

  • BACKUP DATABASE PLUS ARCHIVELOG
    → CDBのルートに接続して実行。全PDBのデータファイルや制御ファイル、SPFILE、アーカイブログも含む。

  • BACKUP DATABASE ROOT
    → ルートコンテナのみバックアップ。

  • 個別PDBに接続して BACKUP DATABASE
    → そのPDBのみバックアップされる。

2. バックアップにタグを付ける

バックアップに TAG を指定することで、後で識別しやすくなります。


3. 増分バックアップ

  • INCREMENTAL LEVEL 0(フルバックアップ相当)

  • INCREMENTAL LEVEL 1(差分バックアップ)

    • Differential:前回の差分 or 累積バックアップ以降の変更ブロックをバックアップ

    • Cumulative:前回のLevel 0以降のすべての変更ブロックをバックアップ(復元時の手間が減るが、容量が大きい)


4. Oracle推奨のバックアップ戦略

  • 最初に LEVEL 0イメージコピーを作成し、以降 LEVEL 1 バックアップでロールフォワード(更新)

  • RECOVER COPY OF DATABASE → イメージコピーを最新に更新

  • BACKUP INCREMENTAL LEVEL 1 → 前日以降の変更をバックアップ

  • タグ管理が重要


5. シェルスクリプトとcronで自動化

  • シェルスクリプト内で RUN {} ブロックを使いRMAN操作

  • cronに登録して毎日自動で5:01AMにバックアップ実行

  • MAILTO 変数にメールアドレスを指定すれば結果を受信可


6. RMANのバックアップ確認

  • LIST BACKUP で全バックアップを確認
    → タグ、ステータス、サイズ、PDB名などを表示

  • LIST BACKUP SUMMARY で要約表示

  • 特定のPDBやデータファイル、アーカイブログなど絞り込み可


7. バックアップ監視のためのSQL

  • V$BACKUP_SETV$RMAN_STATUS などのビューを使用

  • 例:2日間バックアップのないPDBを検出して通知


8. 不要なバックアップの管理

  • Obsolete(不要):RMAN設定の保持期間を超えたもの

    • 例:冗長性1に設定 → 2個目以降は不要

    • DELETE OBSOLETE で削除

  • Expired(消失):OS上から手動で削除されたファイル

    • CROSSCHECK BACKUP → 状態を更新

    • DELETE EXPIRED BACKUP でメタ情報からも削除

⚠️ バックアップファイルはOSから直接削除しないこと!


9. アーカイブログの管理

  • BACKUP ARCHIVELOG ALL → アーカイブログのみバックアップ

  • DELETE BACKUP OF ARCHIVELOG ALL → バックアップ削除

  • DELETE ARCHIVELOG ALL → バックアップが存在していないと削除されない(安全設計)


10. バックアップの整合性チェック

  • VALIDATE DATABASE CHECK LOGICAL
    → データファイルの論理・物理破損を検出

  • VALIDATE BACKUPSET
    → バックアップファイルが壊れていないか検証

🔧  Oracle データベースのリカバリとインスタンス起動プロセス

【1】インスタンスの起動とマウント

  • STARTUP コマンドを実行すると、Oracle インスタンスは初期化パラメータファイル(init.ora または spfile)を読み込み、MOUNT 状態へ移行します。

  • MOUNT状態では制御ファイル(control file)の整合性を確認。1つでも欠損・破損していると起動に失敗します。

  • OPEN 状態に移行する際は、REDOログとデータファイルの存在確認が行われ、欠落があるとエラーが出てMOUNT状態に留まります。

【2】障害検出とリカバリ確認

  • データファイル欠落時には V$RECOVER_FILE ビューで確認可能。

  • RMAN(Recovery Manager)には Data Recovery Advisor(DRA)ツールがあり、自動で障害を分析・修復提案します(※ただし、RAC未対応)。

【3】PDBのデータファイル喪失とリカバリ手順

  • ファイルを移動しPDB起動失敗を再現 → RMANでフルバックアップから復旧 → RESETLOGS付きでOPEN。

【4】コントロールファイルの喪失

  • 複数構成していれば残っているファイルをコピーして再利用可能。全損失時は別の方法が必要。

【5】REDOログメンバーの破損

  • 複数メンバー構成の場合、1つが壊れても影響はない。

  • 壊れたファイルは ALTER DATABASE DROP LOGFILE MEMBERADD LOGFILE MEMBER で再作成可能。

【6】完全リカバリ(Complete Recovery)

  • 例:18:00のバックアップ+その後のアーカイブログで最新状態に復旧。

【7】不完全リカバリ(Point-in-Time Recovery)

  • 特定の時点に戻す復旧。途中のトランザクションは失われる。

  • 例:19:00のアプリ更新がバグを含む → 18:59:59 に戻す。

  • 必ず RESETLOGS オプションでデータベースを開く必要がある。

【8】CDB/PDBのポイントインタイム・リカバリ

  • CDB全体を戻す場合は、すべてのPDBも同様に巻き戻される。

  • SET UNTIL TIMERESETLOGS を併用。


🔹チェックポイントとインスタンスリカバリの仕組み

  • チェックポイント(Checkpoint) は、バッファキャッシュの変更済みデータをディスクのデータファイルに同期する仕組み。

  • COMMIT は REDOログに書かれるだけで、データファイルには即座に反映されない。

  • ログスイッチ 時にチェックポイントがトリガーされ、どこからリカバリを始めるかの「位置情報」が記録される。

  • インスタンスリカバリ では、データファイルのヘッダにあるSCNと制御ファイル内のSCNを比較して、必要に応じてREDOログを適用。

  • 最後にロールバックを行い、未コミットトランザクションを取り消す。


🔹MTTR(平均復旧時間)設定

  • FAST_START_MTTR_TARGET パラメータを設定することで、Oracleが自動的にチェックポイント間隔を調整。

  • 小さい値にすると復旧は早いが、IO負荷が上がる。大きすぎると復旧が遅くなる。

  • 実際の推定復旧時間は V$INSTANCE_RECOVERY ビューで確認可能。