您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

Oracle 10g中闪回查询操作实例(二)

 


3、Flashback Drop

Oracle Flashback Drop特性提供一个类似回收站的功能,用来恢复不小心被删除的表。当删除表时,Oracle 10g并不立刻释放被删除的表所占用的空间,而是将这个被删除的表进行自动重命名(为了避免同类对象名称的重复)并放进回收站中。所谓的回收站类似于Windows系统中的回收站,是一个虚拟的容器,用于存放所有被删除的对象,在回收站中被删除的对象将占用创建时的同样的空间。如果这个被删除的表需要进行恢复,就可利用Flashback Drop功能。

 

例:进行一个删除表后恢复的简单测试。

(1)显示回收站信息(不要以Sysdba用户查询,否则会把错)

SQL>show recyclebin;

可以看到,回收站中是没有任何结果的,表示没有任何表在回收站中。

 

(2)创建一个表,并删除,再次显示回收站信息

SQL>create table test_drop(name varchar2(10));

SQL>drop table test_drop;

SQL>show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

TEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2005-05-07:14:30:47

 

(3)对被删除的表进行恢复

SQL>flashback table test_drop to before drop;或

SQL>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;

 

(4)管理回收站

清除回收站中的单个表:purge table test_drop

清除整个回收站:purge recyclebin

清除不同的对象回收站:purge user_recyclebin或purge dba_recyclebin

注意:需要注意的是sysdba的drop操作不会被记录,Oracle也从不推荐用户使用sysdba身份创建用户对象

 

(5)确认删除一个表

SQL>drop table test_drop purge;

如果删除一个表且不放到回收站中不能进行恢复,在drop语句中可以利用purge选项。

 

(6)可以通过参数禁用或启用recyclebin这个特性

在Oracle 10gR1中,通过修改一个隐含_recyclebin为False可以禁用这个特性,在Oracle 10gR2中,recyclebin变成了一个常规参数,可以在session/system级动态修改 :

SQL> show parameter recyclebin

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------

recyclebin                           string      on

SQL> alter session set recyclebin=off;

会话已更改。

SQL> alter session set recyclebin=on;

会话已更改。

SQL> alter system set recyclebin=off;

系统已更改。

SQL> alter system set recyclebin=on;

系统已更改。

 


4、Flash Version Query

Oracle Flashback Version Query特性,利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。

 

Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:

·VERSIONS_SCN - 系统改变号

·VERSIONS_TIMESTAMP - 时间

 

例如:在test表中,时间1插入一条记录,时间2删除了这条记录,对于时间3执行select * from test当然查询不到这条记录,只能看到该表最后的提交记录。这时如果利用Flash Table或者是Flash Query,只能看到过去的某一时间点的一个快照,而利用Flashback Version Query,能够把时间1、时间2的操作给记录下来,并详细的查询出对表进行的任何操作。

SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id

from test versions

between timestamp minvalue and maxvalue

order by versions_starttime;

 

在上述查询中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是伪列,还有一些伪列,如

versions_startscn和versions_endscn显示了该时刻的系统更改号。列versions_xid显示了更改该行的事务标识符。

当然,除了分析以上所有的变更之外,可以根据需要指定时间段,如显示在2005-05-07时间在15:30到16:30之间test表的所有变更。

SQL>select id from test

versions between timestamp to_date(’2005-05-07 15:30:00’,’yyyy-mm-dd hh24:mi:ss’) and to_date(’2005-05-07 16:30:00’,’

yyyy-mm-dd hh24:mi:ss’)

 


5、Flashback Transaction Query

Oracle Flashback Transaction Query特性确保检查数据库的任何改变在一个事务级别,可以利用此功能进行诊断问题、性能分析和审计事务。它其实是Flashback Version Query查询的一个扩充,Flashback Version Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。

 

例:Flashback Transaction Query的操作实例。

(1)在test表中删除记录,获得事务的标识XID,然后提交。

SQL>delete from test where id=2;

SQL>select xid from v$transaction;

XID

----------------

04001200AE010000

SQL>commit;

在测试中方便起见,在事务没有提交的时候,获得事务的XID为04001F0035000000。实际情况下,不可能去跟踪每个事务,想要获得已提交事务的XID,就必须通过上面的Flashback Version Query。

 

(2)进行Flashback Transaction Query

SQL>select * from FLASHBACK_TRANSACTION_QUERY

where xid=’04001F0035000000’;

UNDO_SQL

insert into "test"."TEST"("ID") values (’2’);

注意:这个删除语句对应的是1个Insert语句,如果想回滚这个事务,执行这个Insert语句即可。

可以看到,Flashback Transaction Query主要用于审计一个事务,并可以回滚一个已经提交的事务。如果确定出错的事务是最后一个事务,我们利用Flashback Table或者Flashback Query就可以解决问题。但是,如果执行了一个错误的事务之后,又执行了一系列正确的事务,那么上面的方法就无能为力,利用Flashback Transaction Query可以查看或回滚这个错误的事务。

 

(文章来自网络,如有侵权请来信告知,本站将在第一时间删除。)

相关文章 [上一篇] Oracle 10g中闪回查询操作实例(一)
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号