LoginSignup
2
0

More than 1 year has passed since last update.

[Autonomous Database]Flashback Tableを試す

Last updated at Posted at 2022-03-16

はじめに

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_FLASHBACKOracle Flashback

  • Flashback databaseはユーザーが明示的に利用できませんが、リストアに内部的に利用されるようです

Autonomous Database でFlashback機能は利用できますか?
Flashback databaseはリストアの際に内部的に利用されていますが、ユーザーが明示的に利用することはできません。 その他のFlashback query, table, drop機能は通常のOracle Databaseと同様に利用可能です。

出典:Autonomous Database 技術FAQ

  • 初期化パラメータ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    

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0