3

私は最近、オラクルには私にとって非常に便利な機能があることを知りました.デザイナー/インプリメンターはデータ履歴をあまり気にしませんでした.レコードがオラクルキャッシュでまだ利用可能であれば、次のようにレコードの履歴状態を照会できます:

select * 
  from ( select * 
           from sometable where some_condition ) 
as of timestamp sysdate-1 

しかし今、範囲内の履歴データを確認する必要があります。とにかく、キャッシュを使用して可能ですか?

4

3 に答える 3

8

はい、このように:

SQL> select sal from emp where empno=7369;

       SAL
----------
      5800

SQL> update emp set sal = sal+100 where empno=7369;

1 row updated.

SQL> commit;

Commit complete.

SQL> update emp set sal = sal-100 where empno=7369;

1 row updated.      

SQL> commit;

Commit complete.

SQL> select empno, sal, versions_starttime,versions_xid
  2  from emp
  3  versions between timestamp sysdate-1 and sysdate
  4  where empno=7369;

     EMPNO        SAL VERSIONS_STARTTIME                                                          VERSIONS_XID
---------- ---------- --------------------------------------------------------------------------- --
      7369       5900 11-DEC-08 16.05.32                                                          0014001300002A74
      7369       5800 11-DEC-08 16.03.32                                                          000D002200012EB1
      7369       5800

どこまで戻ることができるかは、UNDO_RETENTIONパラメータによって制限され、通常は数日ではなく数時間になることに注意してください。

于 2008-12-11T15:53:54.317 に答える
2

この種のフラッシュバック クエリは、UNDO テーブルスペースに書き込まれる UNDO 情報に依存することに注意してください。また、その情報は永久に保持されるわけではありません。妥当な負荷がかかっているほとんどの実動システムでは、UNDO 情報を 24 時間利用できるわけではありません。

Oracle のバージョンによっては、UNDO_RETENTIONフラッシュバックしようとしている期間よりも長い値にパラメーターを設定する必要がある場合があります。

于 2008-12-11T16:59:44.217 に答える
0
SELECT *
  FROM sometable
  VERSIONS BETWEEN TIMESTAMP systimestamp - 1 AND systimestamp

最終日のすべての行のすべてのバージョンが表示されます。

これでできることはもっとたくさんあります。ドキュメントを確認してください(ご使用のバージョンのドキュメントを検索することをお勧めします)。

于 2008-12-11T15:51:41.793 に答える