Oracle Databaseを運用する上で、最も強力な「保険」の一つがフラッシュバック・データベース(Flashback Database)です。 ユーザーが誤って大規模な更新を行ったり、アプリケーションのバグでデータが壊れたりした際、データベース全体を数時間前の状態に一瞬で巻き戻すことができます。
本記事では、この機能を有効にするための具体的な手順と、実運用で絶対に外せない注意点を初心者向けに解説します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔁 フラッシュバック・データベースとは?
データベース全体を、特定のSCN(システム変更番号)や時刻まで「巻き戻す」機能です。
従来のバックアップからのリストア・リカバリとは異なり、データベースを解体せずに「フラッシュバック・ログ」を使用して過去の状態を再現するため、復旧時間が極めて短いのが特徴です。
注意:この機能は論理的な誤操作(データの誤削除など)の救済用です。ディスクが壊れるなどの「物理障害」には対応できないため、通常のバックアップ(RMAN等)との併用が必須です。
🔧 フラッシュバック・データベースの構成手順
以下の4ステップで有効化します。作業はすべて SYSDBA 権限で行います。
Step1:アーカイブログモードの有効化
フラッシュバック機能は、データベースが「アーカイブ・モード」で動作していることが絶対条件です。
-- 現在のモード確認
ARCHIVE LOG LIST
-- NOARCHIVELOG(非アーカイブ・モード)の場合は以下の手順で変更
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 確認(「アーカイブ・モード」になっていればOK)
ARCHIVE LOG LIST;
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(高速リカバリ領域)の構成
フラッシュバック用のログを保存する場所(FRA)のサイズとパスを指定します。
-- FRAのサイズ設定(例:10GB)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G SCOPE=BOTH;
-- FRAのディレクトリ設定(ディレクトリは事前にOS側で作成しておくこと)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH;
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
Step3:保持期間(ターゲット)の設定
「何分前まで戻せるようにしたいか」を指定します。
-- 保持期間を設定(例:1440分 = 24時間)
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 1440 SCOPE=BOTH;
Step4:フラッシュバック機能の有効化
最後に、データベースに対して機能をONにします。
-- フラッシュバックの有効化
ALTER DATABASE FLASHBACK ON;
-- 有効になったか確認(結果がYESなら成功)
SELECT FLASHBACK_ON FROM V$DATABASE;
⚠ 運用上の重要チェックポイント
構築が終わっても、以下の5つのポイントを理解していないと、いざという時に「戻せない!」という事態に陥ります。
1. FRAの空き容量不足は致命的
FRAにはフラッシュバック・ログの他に、アーカイブログやバックアップも保存されます。ここがいっぱいになると、Oracleは古いフラッシュバック・ログを自動削除してしまいます。
-- FRAの使用状況(使用率など)を監視する
SELECT * FROM V$RECOVERY_FILE_DEST;
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
2. 「保持期間」はあくまで努力目標
DB_FLASHBACK_RETENTION_TARGET を24時間に設定していても、FRAの空き容量が足りなければログは削除されます。「設定したから24時間戻せる」と過信せず、現在の「実効的な最古時点」を常に把握しましょう。
-- 実際に今、どこまで戻せるか(最古の時刻とSCN)を確認
SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;
3. バックアップの代替にはならない
前述の通り、物理的なディスク故障やデータファイルの消失には無力です。「迅速な論理復旧のフラッシュバック」と「物理復旧のRMANバックアップ」は両輪です。
4. パフォーマンスへの影響
常にログを書き出し続けるため、更新(DML)が極端に激しいシステムでは、わずかにオーバーヘッドが発生します。
5. 不要な場合はOFFにしてリソースを解放
開発環境などで一時的に不要になった場合は、OFFにすることでディスク容量(FRA)を節約できます。
-- フラッシュバックの無効化
ALTER DATABASE FLASHBACK OFF;
FAQ
Q:フラッシュバックを実行すると、その後のデータはどうなりますか?
A:指定した時点まで「すべて」が戻ります。巻き戻した後に ALTER DATABASE OPEN RESETLOGS; で起動すると、巻き戻した時点より後の更新内容は失われます。
Q:Standard Editionでも使えますか?
A:はい、Oracle Database 19cなどの最新バージョンではStandard Edition 2でも利用可能です(以前のバージョンではEnterprise Edition限定の機能でした)。
Q:特定のテーブルだけ戻したいのですが。
A:その場合は「フラッシュバック・データベース」ではなく、「フラッシュバック・テーブル」または「フラッシュバック・ドロップ」を使用する方が効率的です。
✅ まとめ
| ステップ | 操作内容 | 重要な確認コマンド |
| 1. ログモード | アーカイブログモードへ変更 | ARCHIVE LOG LIST |
| 2. 格納先 | FRAの場所とサイズを定義 | V$RECOVERY_FILE_DEST |
| 3. 保持期間 | 目標時間を分単位で設定 | V$FLASHBACK_DATABASE_LOG |
| 4. 有効化 | 機能をONにする | SELECT FLASHBACK_ON FROM V$DATABASE |
🔚 おわりに
フラッシュバック・データベースは、大規模な障害からの復旧時間を劇的に短縮できる素晴らしい機能です。しかし、その有効性は「FRAの空き容量」に完全に依存します。
ITエンジニアとして、設定して終わりにするのではなく、日々の空き容量監視を含めた運用設計を心がけましょう。
もしFRAの運用や、より具体的な復旧手順(FLASHBACK DATABASE TO SCN …)について詳しく知りたい場合は、続けてお伝えできます。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
Oracle Flashback Technologyの使用

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


コメント