新しく拡張されたフラッシュバック問合せ

Flashback Query

  • 失われたデータをリカバリしたり、コミット済の不適切な変更を取り消す場合。
  • 現在のデータを過去の特定の時点の対応するデータと比較する場合。
  • 特定の時点でのトランザクション・データの状態を確認する場合。
  • アプリケーションの設計を簡略化する場合。一時データの類を格納する必要性をなくすことにより簡略化します。
  • レポート作成ツールなどのパッケージ・アプリケーションを過去のデータに適用する場合。
  • アプリケーションにセルフサービス・エラー修正を提供し、ユーザーが自分のエラーを元に戻して修正できるようにする場合。

Flashback Queryの実行:SELECT …AS OF

SQL> select test_fb.* , to_char(sysdate,'yyyymmddhh24miss') from test_fb;

        ID NAME                           TO_CHAR(SYSDAT
---------- ------------------------------ --------------
         1 Jason Kidd                     20080318150423

SQL> update test_fb set name = 'Yao Ming' where id = 1;

1 row updated.

SQL> commit;

Commit complete.

SQL> select test_fb.* , to_char(sysdate,'yyyymmddhh24miss') from test_fb;

        ID NAME                           TO_CHAR(SYSDAT
---------- ------------------------------ --------------
         1 Yao Ming                       20080318150524

SQL>
-- ここでFlashback
SQL> select * from test_fb as of timestamp to_timestamp('20080318150423','yyyymmddhh24miss') where id = 1;

        ID NAME
---------- ------------------------------
         1 Jason Kidd

DBMS_FLASHBACKの実行

  • DBMS_FLASHBACK.ENABLE_AT_TIMEまたはDBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBERをコールし、過去の指定された時点まで時計を戻します。この後、すべての問合せで、指定された時間の最新データが取得されます。
  • DBMS_FLASHBACK.DISABLEをコールし、現在に戻ります。別の時間について再度ENABLEをコールする前に、DISABLEをコールする必要があります。ENABLE / DISABLEのペアはネストできません。
SQL> select * from test_fb;

        ID NAME
---------- ------------------------------
         1 Yao Ming

SQL> execute dbms_flashback.enable_at_time(to_timestamp('20080318150423','yyyymmddhh24miss'));

PL/SQL procedure successfully completed.

SQL> select * from test_fb;

        ID NAME
---------- ------------------------------
         1 Jason Kidd

SQL>
SQL> exec dbms_flashback.disable;

PL/SQL procedure successfully completed.

SQL> select * from test_fb;

        ID NAME
---------- ------------------------------
         1 Yao Ming

SQL>

ORA_ROWSCNの使用

ORA_ROWSCNは、固定されていない、または外部表ではない表の疑似列です。これは、指定された行に対する最新の変更のSCNを表します。つまり、その行に対する最新のCOMMIT操作です。

SQL> select to_char(ora_rowscn),test_fb.* from test_fb;

TO_CHAR(ORA_ROWSCN)                              ID NAME
---------------------------------------- ---------- ------------------------------
2252252948535                                     1 Yao Ming

アプリケーション開発においてORA_ROWSCNを使用することの特に有益な点は、同時実行性制御およびクライアント・キャッシュの無効化があります。

Flashback Versions Qeury

SELECT …. FROM … VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}

擬似列説明:

  • VERSIONS_STARTSCN:行バージョンが作成されたときの開始システム変更番号(SCN)。
  • VERSIONS_STARTTIME:行バージョンが作成されたときの開始システムTIMESTAMP。
  • VERSIONS_ENDSCN:行バージョンが期限切れとなったときのSCN
  • VERSIONS_ENDTIMESTAMP:行バージョンが期限切れとなったときのTIMESTAMP。
  • VERSIONS_XID:その行バージョンが作成されたトランザクションの識別子。
  • VERSIONS_OPERATION:トランザクションにより実行された操作。Iは挿入、Dは削除、Uは更新を表します。

使用例

SQL> select versions_startscn,versions_endscn,versions_xid,versions_operation,id,name from test_fb versions between timestamp
  2  to_timestamp('20080318150423','yyyymmddhh24miss') and to_timestamp('20080318150524','yyyymmddhh24miss') where id = 1;

VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID     V         ID NAME
----------------- --------------- ---------------- - ---------- ------------------------------
       2.2523E+12                 10002F00BD2F0000 U          1 Yao Ming
                       2.2523E+12                             1 Jason Kidd

SQL>

Flashback Transaction Query

FLASHBACK_TRANSACTION_QUERYビューの問い合わせ

SQL> SELECT xid, operation, start_scn,commit_scn, logon_user, undo_sql
  2  from flashback_transaction_query
  3  where xid = hextoraw('10002F00BD2F0000');

XID              OPERATION                         START_SCN COMMIT_SCN LOGON_USER                     UNDO_SQL
---------------- -------------------------------- ---------- ---------- ------------------------------ ----------------------------------------
10002F00BD2F0000 UPDATE                           2.2523E+12 2.2523E+12 JASON                          update "JASON"."TEST_FB" set "NAME" = 'J
                                                                                                       ason Kidd' where ROWID = 'AAAI3wAAEAAAAZ
                                                                                                       UAAA';

10002F00BD2F0000 BEGIN                            2.2523E+12 2.2523E+12 JASON
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License