flashback query

FLASHBACK 技术包括多个方面:flashback databaseflashback dropflashback queryflashback table

其中flashbackdatabase利用的是闪回日志,flashback drop利用的回收站,flashback query flashbacktable 利用的是undo信息。Flashbackquery可以帮助我们确定在过去某个时间点或者时间段内表的数据是如何存储的,而flashback table则是帮助我们切切实实的将表闪回到过去的某个时间点。

 

Flashback query 是在oracle 9i时引入的的,为的是帮助我们查询在过去某个时间点某表的数据状态。语法格式为

Select * from table_name as of scnscn;

Select * from table_name as oftimestamp timestamp;

 

由于flashbackquery只可以查询过去某个时间点的信息,无法针对某一个时间段进行查询,因此在10g中,oracle引入了flashbackversion query,语法格式如下:

Select  versions_xid,versions_startscn,versions_endscn,versions_starttime,versions_endtime,….From table_name versions between scn startscn and endscn;

Select  versions_xid,versions_startscn,versions_endscn,versions_starttime,versions_endtime,….From table_name versions between scn minvalue and maxvalue;

 

Select  versions_xid,versions_startscn,versions_endscn,versions_starttime,versions_endtime,….From table_name versions between timstamp starttime and endtime;

需要注意的是,flashback version query不可以跨越ddl执行

 

除了flashbackversion query 外,oracle还为我们提供了flashback  transaction query,通过 flashback  transaction query 我们可以针对某一事务语句进行查询,获悉该事务所影响的表数据。语法格式如下:

 

Select * from flashback_transaction_query where xid = ??;

 

Flashback table 可以将表闪回的之前的某个状态,语法格式如下:

Flashbacktable table_name to scn scn;

Flashbacktable table_name to timestamp timestamp;

 

需要注意的是flashback table 同样不可以跨越ddl,但是如果我们仅仅是对表执行了添加列的ddl操作,那么我们是可以闪回到ddl之前的某个状态的,只是新添加的列取值全部为空。

 

Flashback table操作是通过临时表对需要闪回的表进行了删除和插入操作(删除所有数据并重新插入所有数据),因此可能发生行的位置改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值