Oracleデータベースのフラッシュバック技術:実践的な復旧シナリオ

人為的誤操作やシステム障害への対策として、RACやData Guardに加え、Oracleのフラッシュバック機能が有効な手段です。この技術はUNDO領域や専用ログを活用し、データの過去状態を復元可能にします。

主な機能分類:

  • UNDO領域依存型:クエリ/バージョンクエリ/トランザクションクエリ/テーブル復元
  • リサイクルビン利用型:ドロップ復元
  • フラッシュバックログ依存型:データベース全体復元

Oracle 11g以降では、FBDAプロセスによる長期履歴追跡機能も追加され、稼働中のデータベースでフラッシュバック機能を有効化可能になりました。

UNDO領域の確認

復元処理前に領域容量を確認します:

SELECT ROUND(SUM(bytes) / 1024 / 1024 / 1024, 2) AS undo_gb
FROM dba_data_files 
WHERE tablespace_name = 'UNDOTBS';

UNDO領域はトランザクションのロールバックや一貫性読み取りに使用されます。自動管理モードではUNDO表領域が使用され、手動モードではロールバックセグメントが参照されます。

特定時刻のデータ復元

誤更新対応の例:

CREATE TABLE hist_user_data NOLOGGING AS 
SELECT * FROM app_schema.user_profiles 
AS OF TIMESTAMP TO_TIMESTAMP('2023-08-15 22:30:00', 'YYYY-MM-DD HH24:MI:SS');

実行前の確認ポイント:

  1. DML影響範囲の事前評価
  2. 大規模スクリプトはDBAによるレビュー
  3. 本番環境前の十分なテスト

関連テーブルの同時復元

顧客情報と契約情報の関連復元:

CREATE TABLE cust_hist AS 
SELECT * FROM app_schema.customers 
AS OF TIMESTAMP TO_TIMESTAMP('2023-08-15 22:30:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE customer_id = 'CUST100';

CREATE TABLE subs_hist AS 
SELECT * FROM app_schema.subscriptions 
AS OF TIMESTAMP TO_TIMESTAMP('2023-08-15 22:30:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE customer_id = 'CUST100';

Data Pumpによるエクスポート:

expdp system/password@prod DIRECTORY=backup_dir 
DUMPFILE=cust_data.dmp LOGFILE=export.log 
SCHEMAS=app_schema FLASHBACK_TIME="TO_TIMESTAMP('2023-08-15 22:30:00', 'YYYY-MM-DD HH24:MI:SS')";

主要フラッシュバック機能

バージョン履歴の取得:

SELECT versions_starttime, versions_operation, customer_name
FROM app_schema.customers
VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP - INTERVAL '1' HOUR AND SYSTIMESTAMP
WHERE customer_id = 'CUST100';

テーブル削除の復元:

FLASHBACK TABLE app_schema.deleted_table TO BEFORE DROP 
RENAME TO restored_table;

データベース全体の復元フロー:

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2023-08-15 22:30:00', 'YYYY-MM-DD HH24:MI:SS');
ALTER DATABASE OPEN RESETLOGS;

タグ: Oracle11g FlashbackDatabase DataPump UNDO RECYCLEBIN

7月7日 17:14 投稿