commit了事务,还能rollback吗?

alj317 2010-11-25 09:26:11
请教各位大侠
在Oracle中,如果对某个事务commit了,它修改前的数据是否还是在缓存中?
如果还在的话,那么commit之后,还能进行回退吗?怎么回退啊?
...全文
2382 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
YY_MM_DD 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 alj317 的回复:]

引用 1 楼 xiaobn_cn 的回复:
commit后就不能rollback了

那先前的数据是否还是在缓存中呢?
如果修改前有个游标是要读取旧的值,它是否会在commit之后仍然是读取旧值?
[/Quote]
可以读取旧值,下面查询当前表60分钟前的数据,你就可以根据这个记录变相的回滚到你提交之前的记录。
select * from tableName as of timestamp systimestamp - interval '60' minute
冰山客 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alj317 的回复:]
引用 3 楼 wkc168 的回复:
引用楼主 alj317 的回复:
请教各位大侠
在Oracle中,如果对某个事务commit了,它修改前的数据是否还是在缓存中?
如果还在的话,那么commit之后,还能进行回退吗?怎么回退啊?

知道个提交时间的话 用闪回

“闪回”是什么?
[/Quote]

“闪回”是Oracle 10g提供的新特性,举个例子,在9:00你对emp表做了修改,并commit,但是你想查询8:00的数据(也就是commit之前的数据),使用闪回查询(flashback)是可以查询到的,但是这些数据不是从表中查询到,而是从回滚段中得到
冰山客 2010-11-25
  • 打赏
  • 举报
回复
先前的数据是否在缓存中这个不一定,这要看Oracle执行的是快速清除还是延迟清除,快速清除是你提交后会立即将这些数据清理掉,延迟清除则是等下一次要用到这些块时,先前的数据将会被覆盖,这些数据即使没有被立即清除,你用游标也是无法读到的,但是旧的数据会保存在回滚段中,可以提供闪回(10g)
alj317 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wkc168 的回复:]
引用楼主 alj317 的回复:
请教各位大侠
在Oracle中,如果对某个事务commit了,它修改前的数据是否还是在缓存中?
如果还在的话,那么commit之后,还能进行回退吗?怎么回退啊?

知道个提交时间的话 用闪回
[/Quote]
“闪回”是什么?
suhenhappy 2010-11-25
  • 打赏
  • 举报
回复
不能了吧...
心中的彩虹 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 alj317 的回复:]
请教各位大侠
在Oracle中,如果对某个事务commit了,它修改前的数据是否还是在缓存中?
如果还在的话,那么commit之后,还能进行回退吗?怎么回退啊?
[/Quote]
知道个提交时间的话 用闪回
alj317 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaobn_cn 的回复:]
commit后就不能rollback了
[/Quote]
那先前的数据是否还是在缓存中呢?
如果修改前有个游标是要读取旧的值,它是否会在commit之后仍然是读取旧值?
xiaobn_cn 2010-11-25
  • 打赏
  • 举报
回复
commit后就不能rollback了

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧