+ -
当前位置:首页 → 问答吧 → truncate之后为何不能flashback?

truncate之后为何不能flashback?

时间:2011-09-14

来源:互联网

flashback是从undo中获取数据,但undo中的数据在commit之后随时可能会被覆盖,所以flashback是否成功要碰运气。如果是truncate掉的table,flashback就没办法了,即使你是先delete,然后再truncate的也不行。why?
从user_objects中可以看到,truncate之后的table的data_objcet_id发生了改变,oracle无法得知原来的block id,自然无法从undo中寻找数据了。
其实oracle完全可以再多做点工作,让truncate掉的table只要datafile上没有覆盖就可以flashback(当然,undo中的数据也要碰运气了)。drop掉的table都可以放入回收站,data_object_id应该也没啥问题吧。

作者: 我上面有人   发布时间: 2011-09-14

flashback是从undo中获取数据,但undo中的数据在commit之后随时可能会被覆盖,所以flashback是否成功要碰运气。如果是truncate掉的table,flashback就没办法了,即使你是先delete,然后再truncate的也不行。why?

我回答上面这个问题吧。第一点。truncate是DDL操作,所以执行过的DML操作在执行DDL之后会被隐式提交。
如上所述,即使是delete操作 truncate之后。数据也不能flashback

作者: nkxu   发布时间: 2011-09-14

开启FLASHBACKUP ARCHIVE后,DDL操作后同样可以闪回查询

作者: yangtingkun   发布时间: 2011-09-14

版主说的是flashback database吧。

作者: 我上面有人   发布时间: 2011-09-14



QUOTE:原帖由 我上面有人 于 2011-9-14 14:04 发表
版主说的是flashback database吧。

恩,是这个意思,呵呵

作者: buptdream   发布时间: 2011-09-14



QUOTE:原帖由 nkxu 于 2011-9-14 11:56 发表
flashback是从undo中获取数据,但undo中的数据在commit之后随时可能会被覆盖,所以flashback是否成功要碰运气。如果是truncate掉的table,flashback就没办法了,即使你是先delete,然后再truncate的也不行。why?

我回答上面这个问题吧。第一点。truncate是DDL操作,所以执行过的DML操作在执行DDL之后会被隐式提交。
如上所述,即使是delete操作 truncate之后。数据也不能flashback

你这话跟没说有啥区别?????

作者: 我上面有人   发布时间: 2011-09-14



QUOTE:原帖由 yangtingkun 于 2011-9-14 13:21 发表
开启FLASHBACKUP ARCHIVE后,DDL操作后同样可以闪回查询

仅11gr2的 闪回归档 可以针对truncate 操作 闪回 查询


http://www.oracledatabase12g.com ... A2%9E%E5%BC%BA.html

作者: maclean   发布时间: 2011-09-14



QUOTE:原帖由 我上面有人 于 2011-9-14 14:04 发表
版主说的是flashback database吧。

不是,两回事

作者: yangtingkun   发布时间: 2011-09-14



QUOTE:原帖由 yangtingkun 于 2011-9-14 19:19 发表


不是,两回事

请说明白点啊!

作者: g644516804   发布时间: 2011-09-14



QUOTE:原帖由 yangtingkun 于 2011-9-14 13:21 发表
开启FLASHBACKUP ARCHIVE后,DDL操作后同样可以闪回查询

flashback archive?

作者: foxmile   发布时间: 2011-09-14