Oracle初心者向け:フラッシュバック・データベースの構成手順と注意事項

Oracle Master Gold

Oracle Databaseには、ユーザーの操作ミスや不慮のデータ破損時に、過去の時点にデータベース全体を巻き戻すことができる「フラッシュバック・データベース」機能があります。

本記事では、そのフラッシュバック・データベースを使うための**構成手順(コマンド付き)**と、運用上の注意点について、初心者の方でも理解しやすいように解説します。


🔁 フラッシュバック・データベースとは?

Oracleのフラッシュバック・データベースとは、SCN(System Change Number)または時刻を指定して、データベース全体を巻き戻せる機能です。
この機能は、あくまで論理的障害(DELETE文の誤実行など)に対する迅速な復旧を目的としています。


🗂 構成手順の全体像

以下は構成の概念を示したテキスト図です:

┌────────────────────┐
│ Step1:アーカイブログ有効化 │ ← 必須
└────────┬─────────┘

┌────────────────────┐
│ Step2:FRA(保存先)の構成 │ ← 容量に注意
└────────┬─────────┘

┌────────────────────┐
│ Step3:保持期間の設定 │ ← RETENTION TARGET
└────────┬─────────┘

┌────────────────────┐
│ Step4:FLASHBACK機能ON │ ← 実際の有効化
└────────────────────┘

🔧 フラッシュバック・データベースの構成手順(コマンド付き)

以下、SYSDBA権限での実行を前提としています。


✅ Step1:アーカイブログモードの確認と有効化

-- 現在のログモード確認
ARCHIVE LOG LIST

-- モードがNOARCHIVELOGの場合、以下で変更
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
SQL> ARCHIVE LOG LIST
データベース・ログ・モード 非アーカイブ・モード ★
自動アーカイブ 使用禁止
アーカイブ先 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
最も古いオンライン・ログ順序 10
現行のログ順序 12
SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> STARTUP MOUNT
ORACLEインスタンスが起動しました。

Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
SQL> ALTER DATABASE ARCHIVELOG;

データベースが変更されました。

SQL> ALTER DATABASE OPEN;

データベースが変更されました。

SQL> ARCHIVE LOG LIST
データベース・ログ・モード アーカイブ・モード ★
自動アーカイブ 有効
アーカイブ先 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
最も古いオンライン・ログ順序 10
アーカイブする次のログ順序 12
現行のログ順序 12

✅ Step2:FRA(Fast Recovery Area)の構成

-- FRAのサイズ設定(例:10GB)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G SCOPE=BOTH;


-- FRAのディレクトリ設定
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;

📌 FRAにはフラッシュバックログ、アーカイブログ、バックアップなどが保存されるため、十分な空き容量を確保しておく必要があります。


✅ Step3:フラッシュバック保持期間の設定

-- フラッシュバックの保持期間を設定(例:24時間)
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 1440 SCOPE=BOTH;

🔎 これは**巻き戻せる最大時間の目安(分単位)**ですが、FRAの空き状況によって保持できないこともあるため、後述の注意点を参照してください。


✅ Step4:フラッシュバック機能の有効化

-- フラッシュバックの有効化
ALTER DATABASE FLASHBACK ON;

✅ 確認:フラッシュバックが有効になっているか確認

-- FLASHBACK機能が有効か確認
SELECT FLASHBACK_ON FROM V$DATABASE;

結果がYESであれば、構成完了です!

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G SCOPE=BOTH;

システムが変更されました。

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;

システムが変更されました。

SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 1440 SCOPE=BOTH;

システムが変更されました。

SQL> ALTER DATABASE FLASHBACK ON;

データベースが変更されました。

SQL> SELECT FLASHBACK_ON FROM V$DATABASE;

FLASHBACK_ON
------------------------------------------------------
YES

⚠ フラッシュバック・データベース構成後の注意点

構成できたからといって安心するのは早いです。以下のような運用上の注意点があります。


❗1. アーカイブログモードは必須

フラッシュバックはアーカイブログモードでしか動作しません。NOARCHIVELOGでは機能しません。


❗2. FRAのサイズ不足に注意

FRAに空きがなくなると、以下のようなリスクがあります:

  • 古いフラッシュバックログが自動的に削除される
  • 設定した保持期間を実際には維持できない
-- FRAの使用状況確認
SELECT * FROM V$RECOVERY_FILE_DEST;

-- フラッシュバックログの最古時刻確認
SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;
SQL> set lin 1000 pages 1000
SQL> col name for a50
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;

NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES CON_ID
-------------------------------------------------- ----------- ---------- ----------------- --------------- ----------
/u01/app/oracle/fast_recovery_area 1.0737E+10 419430400 0 2 0

SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';

セッションが変更されました。

SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
2274294 2025/03/29 16:24:41

❗3. 「保持期間≠実際に戻せる期間」であることに注意

例えばDB_FLASHBACK_RETENTION_TARGET=1440と設定していても、FRAの空きが足りなければそこまで巻き戻せないことがあります。
運用中は定期的に戻せる最古のSCNや時刻を監視する必要があります。


❗4. フラッシュバックはバックアップの代替ではない

フラッシュバックは一時的な巻き戻し手段です。
物理障害(ディスク障害など)には対応できないため、必ずRMANなどでのバックアップも併用してください。


❗5. 使用予定がないなら一時的にOFFにしてもよい

常にONのままだと、FRAが圧迫され続ける可能性があります。
定期的に使う運用でなければ、一時的にOFFにしてFRAを節約するのも有効です。

-- フラッシュバックの無効化
ALTER DATABASE FLASHBACK OFF;

✅ まとめ

ステップ内容
Step1アーカイブログモードに設定
Step2FRA(保存領域)を構成
Step3保持期間(RETENTION)を設定
Step4フラッシュバック機能を有効化
注意点FRAの容量、保持期間≠実効期間、バックアップ併用

🔚 おわりに

フラッシュバック・データベースは、操作ミスや論理障害に対する迅速な復旧手段として非常に優秀な機能です。
ただし、過信は禁物であり、運用中もFRAの使用状況や保持期間の実効性を確認する習慣が重要です。

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

コメント

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