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/,如需转载,请注明出处,否则将追究法律责任。