閃回版本查詢操作

kl911發表於2008-01-03
SQL> create table t4 as select object_id, object_type,created, status from dba_o
bjects where rownum<3000;


SQL> select count(*) from t4;

  COUNT(*)
----------
      2999

SQL> select versions_xid, versions_starttime, versions_endtime, versions_operation, object_id from t4 versions between timestamp minvalue and maxvalue;

SQL> select undo_sql from flashback_transaction_query where xid=&versions_xid;
(問什麼有時undo_sql裡面沒有內容?是因為row_movement是disable嗎?)
做個試驗:
SQL> alter table t4 ENABLE row movement;
再查還是一樣,只有在update時才可以看到undo_sql語句。而delete後,欄位OPERATION的值為UNKOWN。 可見如果要是delete只有用flashback table的方法來做了。
例如
SQL> flashback table t4 to timestamp to_timestamp('2008-1-3 19:32:56','YYYY-MM-DD HH24:MI:SS');

一些注意:
1. undo_retention是個no gurantee 的限制,如果空間充足,在這個時間內undo資訊會保留,但如果空間不足時,即使沒到undo_retention時間,資料一樣會被取代;
2. undo_retention可以為0,此時表示沒有時間限制,只要空間夠用,data可以一直存放。
3. row_movement, 是當行發生變化時,rowid會自動變化以適應其變化。dba_tables.row_movement ,看看是enable還是disable. 而只要flashback table,就必須將row movement設為ENABLE.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/661919/viewspace-86422/,如需轉載,請註明出處,否則將追究法律責任。

相關文章