はじめに
Autonomous Database(ADB)でもOracle Databaseの機能であるFlashback機能が利用できるため、試してみました。
- ADBで制限されているFlashback機能は以下です。
Oracle Flashbackの機能 | 機能の概要 | ADBでのサポート |
---|---|---|
DBMS_FLASHBACK | フラッシュバック・モードの有効/無効を設定するパッケージ | 可(ただし、次のプロシージャは除きます):DBMS_FLASHBACK.TRANSACTION_BACKOUT |
フラッシュバック・データ・アーカイブ(Flashback Data Archive) | 表に対する全てのトランザクションによる変更を追跡および格納 | 不可 |
フラッシュバック・ドロップ(Flashback Drop) | 削除した表を元に戻す | 可 |
フラッシュバック問合せ(Flashback Query) | 指定時点のデータを表示 | 可 |
フラッシュバック表(Flashback Table) | 表のデータを過去の時点に戻す | 可 |
フラッシュバック・トランザクション(Flashback Transaction) | トランザクション単位で変更を戻す | 不可 |
フラッシュバック・トランザクション問合せ(Flashback Transaction Query) | トランザクションの変更を戻すためのSQL文を表示 | 可 |
フラッシュバック・バージョン問合せ(Flashback Version Query) | 指定された2点間での全ての変更データを表示 | 可 |
※参考:データベース機能の制限事項、19c:DBMS_FLASHBACK、Oracle Flashback
- Flashback databaseはユーザーが明示的に利用できませんが、リストアに内部的に利用されるようです
Autonomous Database でFlashback機能は利用できますか?
Flashback databaseはリストアの際に内部的に利用されていますが、ユーザーが明示的に利用することはできません。 その他のFlashback query, table, drop機能は通常のOracle Databaseと同様に利用可能です。
- 初期化パラメータ
UNDO_RETENTION
(UNDO保存の下限値)は、ADBではデフォルト900秒(15分)
のようです(ADBでは値の変更不可)。
ADB | UNDO_RETENTIONのデフォルト値 |
---|---|
ADW | 900(15分) |
ATP | 900(15分) |
※参考:UNDO_RETENTION、変更可能な初期化パラメータのリスト
- それでは、今回は、Flashback Table文を使用し、表を過去の時点にもどします
前提
テスト用ユーザ(今回はSCOTT)を作成済み
検証手順
1. テストデータの作成
テスト表とテストデータを作成
create table emp(empno number(10) UNIQUE, empname varchar2(10));
insert into emp(empno,empname) values(100,'TANAKA');
insert into emp(empno,empname) values(200,'SAITO');
insert into emp(empno,empname) values(300,'YOSHIDA');
commit;
テストデータを確認
select * from emp;
EMPNO EMPNAME
________ __________
100 TANAKA
200 SAITO
300 YOSHIDA
2. 行の移動を有効化
テスト表の確認(行の移動が無効)
select TABLE_NAME,ROW_MOVEMENT from user_tables where TABLE_NAME='EMP';
TABLE_NAME ROW_MOVEMENT
_____________ _______________
EMP DISABLED
今回は、TO BEFORE DROP
を使用せずに表をフラッシュバックするので、行の移動を有効にする。
TO BEFORE DROP | 備考 |
---|---|
削除された表およびすべての依存するオブジェクトをゴミ箱から取り出すことが可能 | TO BEFORE DROPを使用せずに表をフラッシュバックする場合は、フラッシュバック・リスト内の全ての表で、"行の移動" を有効化にする必要がある |
ALTER TABLE emp ENABLE ROW MOVEMENT;
テスト表の確認(行の移動が有効)
select TABLE_NAME,ROW_MOVEMENT from user_tables where TABLE_NAME='EMP';
TABLE_NAME ROW_MOVEMENT
_____________ _______________
EMP ENABLED
3. テストを変更
変更前
select * from emp;
EMPNO EMPNAME
________ __________
100 TANAKA
200 SAITO
300 YOSHIDA
変更(社員番号300の社員名を「YOSHIDA」→「ASAKURA」に変更)
update emp set empname='ASAKURA' where empno=300;
commit;
編集後(「ASAKURA」に変更されている)
select * from emp;
EMPNO EMPNAME
________ __________
100 TANAKA
200 SAITO
300 ASAKURA ★
4. Flasback Tableで過去のデータに戻す
5分前のデータに戻す
FLASHBACK TABLE emp TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' minute);
テストデータを確認(社員番号300の社員名が「ASAKURA」→「YOSHIDA」に戻っている)
select * from emp;
EMPNO EMPNAME
________ __________
100 TANAKA
200 SAITO
300 YOSHIDA
参考
- 19cのSQL言語リファレンス
- 19c:バックアップおよびリカバリ・ユーザーズ・ガイド