〜誤操作からの救世主、Oracleの強力な巻き戻し機能を解説〜
Oracle Databaseには、時間を巻き戻す魔法のような機能「フラッシュバックテクノロジー(Flashback Technology)」が備わっています。ユーザーが誤ってデータを消去したり、不適切な更新を行ったりした際、バックアップからリストアすることなく、迅速に過去の状態へ復元できる強力なツールです。
本記事では、フラッシュバックの基本概念から各種機能、そして運用で不可欠なUNDO情報(undo_retention)の管理までを分かりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. フラッシュバックテクノロジーとは?
フラッシュバックは、主にUNDOデータ(変更前のデータ情報)を利用して、過去のある時点の状態を参照・復元する仕組みです。
通常のリカバリ(メディアリカバリ)はバックアップファイルを書き戻してログを適用するため時間がかかりますが、フラッシュバックは稼働中のデータベース上で「巻き戻し」を行うため、圧倒的に高速です。
主なフラッシュバック機能一覧
| 機能名 | 主な用途 | 利用データ |
| Flashback Query | 過去時点のデータをSELECT参照する | UNDO情報 |
| Flashback Table | 表(テーブル)単位で過去の状態に戻す | UNDO情報 |
| Flashback Drop | 削除(DROP)した表をごみ箱から復元する | リサイクルビン |
| Flashback Version Query | 特定の行が「いつ、どう変わったか」を確認する | UNDO情報 |
| Flashback Transaction | 特定のトランザクションのみを取り消す | UNDO情報 |
| Flashback Database | DB全体を指定した過去時点に巻き戻す | フラッシュバックログ |
2. よく使う機能の実装例
✅ Flashback Query(過去の状態を参照)
「データを更新しちゃったけど、5分前はどうなってたっけ?」という時に便利です。
-- 5分前のSCOTT.EMP表の状態をそのままSELECT
SELECT *
FROM scott.emp AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE);
✅ Flashback Table(表を過去時点に戻す)
テーブル全体を丸ごと過去に戻します。
-- 1. 行移動(ROW MOVEMENT)を有効化(必須設定)
ALTER TABLE scott.emp ENABLE ROW MOVEMENT;
-- 2. 表を1時間前の状態まで巻き戻す
FLASHBACK TABLE scott.emp
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
✅ Flashback Drop(削除された表の復元)
誤って DROP TABLE しても、Windowsのごみ箱のように戻せます。
-- 表を誤ってDROP
DROP TABLE scott.emp;
-- ごみ箱(Recycle Bin)から復元
FLASHBACK TABLE scott.emp TO BEFORE DROP;
3. UNDO保持時間(undo_retention)の重要性
フラッシュバック機能の多くはUNDO情報に依存しています。この情報が上書きされてしまうと、過去に遡ることができなくなります。
undo_retention パラメータ
UNDO情報を最低限保持する秒数を指定します。
-- 現在の保持設定を確認
SHOW PARAMETER undo_retention
-- 保持期間を1800秒(30分)に延長
ALTER SYSTEM SET undo_retention = 1800;
RETENTION GUARANTEE(保持の保証)
通常、UNDO領域が不足すると undo_retention 期間内でも古い情報から削除されますが、この設定を入れると「指定時間は絶対に消さない」ようになります。
-- 保証付きUNDO表領域の作成例
CREATE UNDO TABLESPACE undotbs2
DATAFILE 'undotbs2.dbf' SIZE 1G
RETENTION GUARANTEE;
4. 運用上のメリットとデメリット(注意点)
フラッシュバックは便利ですが、設定を厳しくしすぎるとDBの動作に悪影響を及ぼすことがあります。
| 設定項目 | メリット | デメリット・リスク |
| undo_retention の延長 | より古い過去の状態まで復元可能になる。 | UNDO表領域の使用量が増加。サイズ不足だとエラー(ORA-30036)で更新処理が止まる。 |
| RETENTION GUARANTEE | 確実に過去へ戻れることを保証できる。 | 新しいトランザクションが領域不足で失敗するリスクが高まる。 |
【運用のポイント】
- サイズ見積もり:
undo_retentionを長くするなら、相応の大きなUNDO表領域を確保すること。 - 監視: UNDO表領域の使用率を常にモニタリングし、DML(更新処理)がエラーにならないよう配慮が必要です。
5. Flashback Database の設定(DB全体の巻き戻し)
データベース全体を過去に戻すには、通常のリカバリ領域(FRA)と専用のログ設定が必要です。
-- 1. アーカイブログモードの確認
ARCHIVE LOG LIST
-- 2. 高速リカバリ領域(FRA)の設定
ALTER SYSTEM SET db_recovery_file_dest = '/u01/app/oracle/flash_recovery_area';
ALTER SYSTEM SET db_recovery_file_dest_size = 5G;
-- 3. DB全体をマウント状態でフラッシュバック有効化
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;
6. FAQ
Q: フラッシュバックを実行しても戻せないケースはありますか?
A: undo_retention を超えてUNDO情報が上書きされた場合や、DROP TABLE 時に PURGE オプションを付けた場合は戻せません。また、表定義の変更(DDL)を跨ぐ復元には制限があります。
Q: Flashback Table と Flashback Database の使い分けは?
A: 特定の表のみに誤操作があった場合は Flashback Table を使用し、大規模なバッチ失敗や論理的な破損によりDB全体を戻す必要がある場合は Flashback Database を選択します。
Q: ROW MOVEMENT を有効化するデメリットはありますか?
A: 有効化すると、更新処理に伴い行の物理的な位置(ROWID)が変わる可能性があります。ROWIDを直接利用してデータアクセスを行っているアプリケーションがある場合は注意が必要です。
7. まとめ
Oracleのフラッシュバック機能は、誤操作によるデータ紛失を防ぐための「最強のセーフティネット」です。
- 参照だけなら Flashback Query
- 表ごと戻すなら Flashback Table
- 消した表を戻すなら Flashback Drop
これらを使いこなすには、UNDO保持期間の設定と、UNDO表領域の適切なサイズ設計が不可欠です。万が一の事態に備え、バックアップ運用と併せてフラッシュバックを適切に構成しておきましょう。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
Oracle Flashback Technologyの使用


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


コメント