〜誤操作からの救世主、Oracleの強力な巻き戻し機能を解説〜
Oracle Databaseには「フラッシュバックテクノロジー(Flashback Technology)」という強力な機能があります。これは、ユーザーが誤ってデータを削除したり更新した場合に、過去の状態にデータベースを戻すことができる機能です。
この記事では、フラッシュバックテクノロジーの基本と、その種類、設定方法、そしてUNDOの保持時間に関するパラメータ(undo_retention)やその影響についてもわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔹 フラッシュバックテクノロジーとは?
Oracleのフラッシュバックは、トランザクションログ(UNDO情報)やREDOログ、あるいはフラッシュバックログを利用して、過去のある時点のデータベースの状態を参照または復元する機能です。
誤ってデータをDELETEしたり、WHERE句を間違えて大量更新してしまった場合でも、バックアップからの復旧ではなく、高速かつ簡単に「巻き戻し」ができる点が魅力です。
🔹 主なフラッシュバック機能一覧と用途
+---------------------------+-------------------------------+
| 機能名 | 主な用途 |
+---------------------------+-------------------------------+
| Flashback Query | 過去時点のデータをSELECT参照 |
| Flashback Table | 表を過去時点に戻す |
| Flashback Drop | 削除した表を復元 |
| Flashback Version Query | 行の変更履歴を確認 |
| Flashback Transaction | トランザクション単位で巻き戻す|
| Flashback Database | データベース全体を巻き戻す |
+---------------------------+-------------------------------+
🔹 テキスト図で理解するイメージ
【フラッシュバックの動作イメージ】
現在時刻
↓
+-------------+ +--------------------------+
| データ削除 | ---> | あっ!間違って消した! |
+-------------+ +--------------------------+
↓
Flashback Tableを実行
↓
+--------------------------+ +---------------------+
| 指定時点にデータを戻す | <--- | 過去のUNDO情報などを参照 |
+--------------------------+ +---------------------+
🔹 よく使うフラッシュバック機能の使用例
✅ Flashback Query(過去の状態を参照)
-- 5分前のSCOTT.EMP表の状態を参照
SELECT *
FROM scott.emp AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE);
✅ Flashback Table(表を過去時点に戻す)
-- 表を1時間前の状態に戻す
FLASHBACK TABLE scott.emp
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
⚠️ この操作には、表に対して
ROW MOVEMENTが有効である必要があります。
-- ROW MOVEMENTの有効化
ALTER TABLE scott.emp ENABLE ROW MOVEMENT;
✅ Flashback Drop(削除された表の復元)
-- 表を誤ってDROPしたとき
DROP TABLE scott.emp;
-- ごみ箱から復元
FLASHBACK TABLE scott.emp TO BEFORE DROP;
🟡 undo_retention と RETENTION GUARANTEEについて
フラッシュバックの多くは「UNDO情報」を参照します。
そのため、UNDO情報の保持期間であるundo_retentionの設定が非常に重要です。
🔸 undo_retentionとは?
- UNDO情報を最低でも保持する秒数を設定する初期化パラメータです。
- 通常、使用されていないUNDO領域は古い情報から順に上書きされます。
-- 現在の設定確認
SHOW PARAMETER undo_retention;
-- 1800秒(30分)に設定
ALTER SYSTEM SET undo_retention = 1800;
例えば「30分前の状態に戻したい」といった場合は、少なくとも
undo_retention=1800が必要です。
🔸 RETENTION GUARANTEE とは?
OracleではUNDO表領域に対して「この期間はUNDO情報を絶対に消さない」という保証を設定することも可能です。
-- 保証付きUNDO表領域の作成例
CREATE UNDO TABLESPACE undotbs2
DATAFILE 'undotbs2.dbf' SIZE 1G
RETENTION GUARANTEE;
通常のUNDO表領域は「best effort(ベストエフォート)」で保持しますが、
RETENTION GUARANTEEを使えばundo_retentionの値が必ず守られます。
⚠️ undo_retentionやRETENTION GUARANTEEのデメリット
❌ undo_retentionが長すぎる場合のリスク
- UNDO情報の保持時間が長くなるほど、UNDO表領域の使用量が増加します。
- 十分なUNDO表領域サイズを確保していないと、DML処理が
ORA-30036: unable to extend segmentエラーで失敗することも。
❌ RETENTION GUARANTEEのデメリット
- UNDO領域が不足しても、過去のUNDO情報を破棄できないため、
新しいDMLや大規模トランザクションが実行できなくなる恐れがあります。 - DML失敗のリスクが高まるため、常にUNDO表領域の使用率を監視する必要があります。
✅ 実運用でのポイント
undo_retentionは目的に応じて設定(例:開発環境は短め、本番は長め)RETENTION GUARANTEEは一時的な作業や検証環境での使用が向いている
(常時ONにするのは非推奨)
🔹 Flashback Database用の設定(データベース全体巻き戻し用)
-- アーカイブログモードである必要あり
ARCHIVE LOG LIST;
-- FRA(高速リカバリ領域)を設定し、Flashbackログを有効化
ALTER SYSTEM SET db_recovery_file_dest = '/u01/app/oracle/flash_recovery_area';
ALTER SYSTEM SET db_recovery_file_dest_size = 5G;
-- Flashback Databaseを有効化
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;
🔹 フラッシュバック機能を使うときの注意点
- undo_retentionを十分に確保
- ROW MOVEMENTの有効化が必要な機能がある
- 表がRECYCLE BINの対象外になるケースもある(外部表や一部システム表)
- 定期的なバックアップとの併用を忘れずに
🔹 まとめ
Oracleのフラッシュバック機能は、うっかり操作ミスや不測の事態に強力なリカバリ手段を提供します。
ただし、UNDO情報の保存期間(undo_retention)や設定方法には慎重さが求められます。
| 設定項目 | メリット | デメリット |
|---|---|---|
undo_retention | 過去に遡れる時間を伸ばせる | UNDO使用量増加、長すぎると領域逼迫の恐れ |
RETENTION GUARANTEE | undo_retentionを100%保証 | DML失敗のリスク増、UNDO領域圧迫 |
状況に応じて適切にパラメータを設定し、トラブルに強いDB運用を心がけましょう!
[参考]
バックアップおよびリカバリ・ユーザーズ・ガイド




コメント