Oracle Databaseで「数年前の特定のデータを確認したい」「削除されたレコードを追跡したい」と思ったことはありませんか?通常、過去データの参照にはUNDO領域を使用しますが、これには保持期間の限界があります。
Oracle フラッシュバック・データ・アーカイブ(Flashback Data Archive、以下FDA)を活用すれば、数ヶ月〜数年にわたる変更履歴を自動保存し、SQLひとつで自在に過去を再現できます。本記事では、FDAの仕組みから構築・参照手順まで、初心者の方にも分かりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
結論:FDA運用の最短手順(チェックリスト)
FDAを導入し、履歴管理を開始するまでのステップは以下の通りです。
- 専用表領域の作成:履歴データを格納する物理領域を確保する。
- アーカイブ(保持定義)の作成:保持期間(RETENTION)を決定する。
- 対象テーブルへの有効化:
ALTER TABLE文で機能を紐付ける。 - 過去データの参照:
AS OF句やVERSIONS BETWEEN句で検索する。
背景と基礎:FDAの仕組みとメリット
従来、過去のデータを参照する「フラッシュバック・クエリ」は、UNDO領域という一時的な場所のデータを利用していました。しかし、UNDOデータは新しい処理で上書きされるため、数時間〜数日前のデータを見るのが限界です。
これに対し、FDA(別名:Total Recall)は、専用の履歴表に変更ログを永続的に記録します。
仕組みの比較
| 機能名 | 主な用途 | データの保存場所 | 保持期間の目安 |
| フラッシュバック・クエリ | 短期間の誤操作リカバリ | UNDO領域 | 数分〜数時間 |
| フラッシュバック・データ・アーカイブ | 長期監査・履歴追跡 | 専用の表領域 | 数ヶ月〜数年 |
動作イメージ
変更履歴はバックグラウンドプロセス(fbda)によって自動的にアーカイブされます。
┌──────────────────────────────┐
│ ユーザー(DML実行) │
└──────────────┬───────────────┘
│ UPDATE / DELETE
▼
┌──────────────────────────────┐ 自動記録 ┌────────────────────────────┐
│ Oracle 表(現在のデータ) │ ───────────→ │ フラッシュバック・アーカイブ │
└──────────────────────────────┘ └──────────────┬─────────────┘
│ SELECT ... VERSIONS で参照
▼
過去のデータ状態を再現
実装手順:FDAの作成と有効化
以下の手順では、Oracle Database 19c(非CDB環境、またはPDB内)にて、DBA権限を持つユーザーで実行します。
1. 履歴保存用の専用表領域を作成
まず、履歴データが既存の業務データを圧迫しないよう、専用の領域を準備します。
-- 1GBの専用表領域を作成(パスは環境に合わせて変更してください)
CREATE TABLESPACE fda_tbs
DATAFILE '/u01/app/oracle/oradata/V19/fda_tbs01.dbf'
SIZE 1G;
-- 作成確認
SELECT file_name FROM dba_data_files WHERE tablespace_name = 'FDA_TBS';
2. フラッシュバック・アーカイブ(保持ルール)の作成
「どの表領域に」「いつまで」保存するかを定義します。
-- 1年間履歴を保持するアーカイブ定義を作成
CREATE FLASHBACK ARCHIVE fda_archive
TABLESPACE fda_tbs
RETENTION 1 YEAR;
3. 対象テーブルへの適用
履歴を管理したいテーブルに対して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;
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の有効化
表が変更されました。
実行例:過去データの参照
FDAが有効なテーブルでは、以下のSQLで過去の状態を照会できます。
特定の時点を指定して参照(AS OF句)
「2026年5月1日 10:00時点」のデータを見たい場合:
SELECT * FROM sales
AS OF TIMESTAMP TO_TIMESTAMP('2026-05-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
変更履歴の変遷を確認(VERSIONS句)
いつ、どのレコードが変化したかを一覧表示します。
-- VERSIONS_STARTTIME 等の疑似列を使用して履歴を追跡
SELECT id, amount, updated_at, VERSIONS_STARTTIME, VERSIONS_ENDTIME, VERSIONS_OPERATION
FROM sales VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2026-05-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND SYSTIMESTAMP
ORDER BY VERSIONS_STARTTIME;
VERSIONS_OPERATION:I(挿入)、U(更新)、D(削除)を確認できます。
トラブルシューティング:代表的なエラーと対処
| ORAエラー | 原因 | 確認・対処方法 |
| ORA-55610 | FDA有効化テーブルへのDDL制限 | 19c以降、多くのDDLが可能になりましたが、一部制限があります。一度 NO FLASHBACK ARCHIVE で解除が必要な場合があります。 |
| ORA-55641 | アーカイブ作成時の権限不足 | FLASHBACK ARCHIVE ADMINISTER 権限が付与されているか確認してください。 |
| ORA-01653 | FDA用表領域の不足 | 履歴データで満杯です。ALTER DATABASE DATAFILE ... RESIZE で拡張してください。 |
運用・セキュリティ上の注意
- ディスク容量の監視:更新頻度が高いテーブルにFDAを適用すると、履歴データが急増します。FDA用表領域の空き容量監視は必須です。
- パフォーマンスへの影響:履歴の書き込みは非同期(fbdaプロセス)で行われるため、業務処理への直接的なインパクトは小さいですが、大量のDMLが発生する環境ではオーバーヘッドを考慮してください。
- 戻し方(機能の解除):SQL
ALTER TABLE sales NO FLASHBACK ARCHIVE;
FAQ
Q1:FDAを有効にした後、カラムの追加や削除はできますか?
A1:Oracle 12c R1以降、FDA有効化状態でのカラム追加(ADD)やリネームはサポートされています。ただし、古いバージョンでは制限があるため、公式ドキュメントでOS/DBバージョンの互換性を確認してください。
Q2:履歴データはいつ削除されますか?
A2:RETENTION で指定した期間を過ぎると、自動的にパージ(削除)されます。
Q3:Standard Edition 2 (SE2) でも使えますか?
A3:はい、Oracle 11g R2 以降、FDA(基本機能)は Standard Edition でも利用可能です。
まとめ
- FDAは長期間のデータ履歴を保存するための機能
- 専用の表領域が必要だが、UNDO領域の制限を受けない
VERSIONS BETWEEN句を使うことで、削除されたレコードも追跡可能- 19cでは管理が容易になり、監査やコンプライアンス対応に最適
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
Oracle Flashback Technologyの使用


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


コメント