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の導入を検討してみてください!
[参考]
バックアップおよびリカバリ・ユーザーズ・ガイド
コメント