Oracle10g フラッシュバック アゲインの巻 その6

投稿日: 2005年3月23日

<Oracle10g フラッシュバック アゲイン の巻 その6>
ペンネーム:びー・うぃりー

先週に引き続きフラッシュバックに関する動作確認をしてまいります。
今週は「フラッシュバック・テーブル」です。

フラッシュバック・クエリーと併用して表データを過去の状態に復元するため
の機能です。(索引なども同時に復元されます)

ただ、フラッシュバックに必要なUndo情報がUndo表領域に存在しない場合、ま
た表の構造が変更された場合は、それ以前にフラッシュバックすることができ
ません。

フラッシュバック・テーブルのポイント
・FLASHBACK ANY TABLE権限 が必要
・表ROWID変更許可 が必要でかつ 許可した時刻以降にフラッシュバック可能
となる。

■環境
Microsoft Windows XP Pro
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Production
With the Partitioning, OLAP and Data Mining options

■はじめ!!!

テスト表を作成し、表ROWID移動許可を有効にします。

SQL> CONN ORAORA/ORAORA
Connected.

SQL> CREATE TABLE FLASHBACK_TBL_TEST
  2  (COL1 NUMBER(5),
  3   COL2 VARCHAR2(10));

Table created.

SQL> ALTER TABLE FLASHBACK_TBL_TEST ENABLE ROW MOVEMENT;

Table altered.

SCNを確認します。

SQL> CONN / AS SYSDBA
Connected.
SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
     632191

テストデータを作成。後にフラッシュバックします。

SQL>
SQL> CONN ORAORA/ORAORA
Connected.
SQL>
SQL> declare
  2  cnt number(5);
  3  begin
  4  cnt := 1;
  5  loop
  6  insert into flashback_tbl_test values(cnt,'INSERTED');
  7  commit;
  8  cnt := cnt + 1;
  9  if cnt >= 101 then
 10     exit;
 11  end if;
 12  end loop;
 13  end;
 14  /

PL/SQL procedure successfully completed.

SQL> SELECT COUNT(*) FROM FLASHBACK_TBL_TEST;

  COUNT(*)
----------
       100

フラッシュバック・クエリーでSCN指定で確認すると、レコードが選択されま
せん。

SQL> SELECT * FROM FLASHBACK_TBL_TEST AS OF SCN 632191;

no rows selected

ここでフラッシュバック・テーブルを実行してみましょう。

SQL> CONN / AS SYSDBA
Connected.

SQL>
SQL> FLASHBACK TABLE ORAORA.FLASHBACK_TBL_TEST TO SCN 632191;

Flashback complete.

SQL> CONN ORAORA/ORAORA
Connected.
SQL> SELECT * FROM FLASHBACK_TBL_TEST;

no rows selected

今週はここまで。

Simple is best!!. ON THE WAY TO CHIGASAKI…