Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1211464
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-01-06 21:40:58

Oracle 9i中,闪回可用的形式仅仅是可以查看先前的数据:称为闪回查询。使用以下形式的SQL语句:

       select * from X as of timestamp to_timestamp('09:30:54','HH24:MI:SS');

       就可以查看09:30:54的时候X表中的数据,这种技术仅仅是使用Oracle的读一致性模型+撤销产生一个数据的影像。

       Oracle 10g中,基于撤销的闪回技术被扩充为闪回版本和闪回事务。闪回版本使用撤销重构了表中的行如何随着时间被改变,该技术可以看到两个时间之间的数据变化:

select * from emp versions between scn minvalue and maxvalue;

可以通过查询'VERSIONS_XID(仅在闪回版本中使用)'看到更改表中的数据的事务的事务号,这是一个新的虚列。

select versions_xid, ename, sal from emp versions between scn minvalue and maxvalue;

虽然'VERSIONS_XID'本身没有什么用,但是当使用闪回事务时这是非常有用的,闪回事务可以用来反转一个事务的效果。

select xid, logon_user from flashback_transaction_query

where xid=hextoraw('xxxxxxxxxxxxxxxx');

'xxxxxxx'就是先前的事务标识符。为了反转事务,可以执行一下查询:

select undo_sql from flashback_transaction_query

where xid=hextoraw('xxxxxxxxxxxxxxxx');

基于撤销的闪回技术不能交叉DDL

闪回数据库等价于传统的不完全恢复,执行闪回后需要以OPEN RESETLOGS打开。

闪回表不同闪回版本和闪回事务,其真正闪回一个表到某个时间点或scn,而不是报告。

闪回数据库不是基于撤销的闪回选项,而是依赖于存在的全新的数据库组件,称为闪回日志。

闪回日志周期性的存储捕获的撤销,就像重做日志存储重做,Flashback日志存储撤销。

最后,Oracle 10g引入了闪回删除。其不依赖于撤销,也不依赖于闪回日志,而是仅仅在DD重重名名:

flashback table emp to before drop;

       这是10g一个非常强大的亮点。

阅读(542) | 评论(0) | 转发(0) |
0

上一篇:读一致性

下一篇:values借用密码

给主人留下些什么吧!~~