フラッシュバック・データ・アーカイブとは?〜過去データを自在に参照する技術〜

Oracle Master Gold

Oracle Databaseには、過去のデータを簡単に参照できる強力な機能がいくつもあります。その中でも、テーブルの変更履歴を自動的に保存し、SQLだけで過去を再現できる機能が「フラッシュバック・データ・アーカイブ(Flashback Data Archive)」です。

この記事では、初心者にもわかりやすくこの機能の概要や使い方を解説します。


フラッシュバック・データ・アーカイブとは?

「フラッシュバック・データ・アーカイブ(以下FDA)」とは、テーブルの過去の状態(変更履歴)を自動で保存し、後からSQLで参照できる機能です。

この機能により、たとえば以下のようなことが可能になります:

  • 「〇月〇日〇時の時点で、売上テーブルの内容はどうなっていたか?」
  • 「このレコードはいつ削除されたのか?」
  • 「過去のデータに基づいた監査をしたい」

従来のフラッシュバックとの違い

Oracleには複数の「フラッシュバック機能」がありますが、FDAの特徴は以下の通りです:

機能名保存期間操作の種類必要な構成
フラッシュバック・クエリ数分~数時間(UNDOで制限)参照のみUNDO領域のみ
フラッシュバック・データ・アーカイブ長期保存可能(数年も可)削除も検出可能専用領域が必要

👉 長期間のデータ監査や改ざん防止に使えるのがFDAの魅力です。


動作イメージ(テキスト図)

以下は、FDAが有効なテーブルでのデータ変更の流れです。

┌──────────────┐
│ 売上テーブル(元データ) │
└─────┬───────┘
│UPDATE/DELETE実行

┌────────────────────┐
│ Flashback Data Archive │ ← 自動的に変更履歴が保存される!
└────────────────────┘

│SELECT ... VERSIONS BETWEEN で参照可能!

実践:FDAの作成と使用例

① フラッシュバック・データ・アーカイブ用の領域を準備

CREATE TABLESPACE fda_tbs DATAFILE '/u01/app/oracle/oradata/oracle/fda_tbs01.dbf' SIZE 1G;

② アーカイブの作成

CREATE FLASHBACK ARCHIVE fda_archive
TABLESPACE fda_tbs
RETENTION 1 YEAR;

※RETENTIONで「何年分のデータを保存するか」を指定します。


③ テーブルにFDAを有効化する

ここでは検証用に以下のテーブルを作成します。

▼ テーブル作成とデータ投入

CREATE TABLE sales (
id NUMBER,
amount NUMBER,
updated_at DATE
);

INSERT INTO sales VALUES (1, 1000, SYSDATE);
INSERT INTO sales VALUES (2, 2000, SYSDATE);
COMMIT;

▼ FDA有効化

ALTER TABLE sales FLASHBACK ARCHIVE fda_archive;

これでsalesテーブルに対するUPDATEやDELETEがあれば、変更履歴が保存されます。

SQL> CREATE TABLESPACE fda_tbs DATAFILE '/u01/app/oracle/oradata/V19/fda_tbs01.dbf' SIZE 1G;  ★表領域を作成

表領域が作成されました。

SQL> select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/V19/users01.dbf
/u01/app/oracle/oradata/V19/undotbs01.dbf
/u01/app/oracle/oradata/V19/system01.dbf
/u01/app/oracle/oradata/V19/sysaux01.dbf
/u01/app/oracle/oradata/V19/fda_tbs01.dbf ★

SQL> CREATE FLASHBACK ARCHIVE fda_archive ★アーカイブの作成
2 TABLESPACE fda_tbs
3 RETENTION 1 YEAR;

フラッシュバック・アーカイブが作成されました。

SQL> CREATE TABLE sales (
2 id NUMBER,
3 amount NUMBER,
4 updated_at DATE
5 );

表が作成されました。

SQL> INSERT INTO sales VALUES (1, 1000, SYSDATE);

1行が作成されました。

SQL> INSERT INTO sales VALUES (2, 2000, SYSDATE);

1行が作成されました。

SQL> commit;

コミットが完了しました。

SQL> ALTER TABLE sales FLASHBACK ARCHIVE fda_archive; ★FDAの有効化

表が変更されました。

過去のデータを参照する方法

① 履歴を参照(VERSIONS句)

SELECT id, amount, updated_at, VERSIONS_STARTTIME, VERSIONS_ENDTIME
FROM sales VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2025-03-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND SYSTIMESTAMP;

このクエリで、過去の変更履歴を確認できます。


注意点

項目内容
対象テーブル一度有効化すると制約が増える(DROP列不可など)
パフォーマンスINSERT/UPDATE/DELETE時にオーバーヘッドがあるため注意

まとめ

フラッシュバック・データ・アーカイブは、Oracleの監査・トレーサビリティ機能の要ともいえる存在です。

  • 長期的に履歴を保存できる
  • 専用のSQLで簡単に参照できる
  • 削除された行の情報も保持できる

運用設計の中で、「データの過去状態も追跡したい」と思ったら、ぜひFDAの導入を検討してみてください!

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

コメント

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