闪回技术之闪回事物查询特别篇4

闪回事物查询
都是查询undo表空间里insert,delete,update的数据,然后更新这些事情还原。


启动实验
SQL> create table test1(id number);
表已创建。

SQL> insert into test1 values(1);
已创建 1 行。

SQL> insert into test1 values(2);
已创建 1 行。

SQL> insert into test1 values(3);
已创建 1 行。

SQL> commit;
提交完成。

delete from test1 where id=1;
commit;

 

select operation,undo_sql from flashback_transaction_query where table_name='TEST1';
利用这个视图可以显示哪些事物引起了数据的变化,并为此提供了撤销事物的SQL,闪回事物查询利用了undo表空间的数据
记录了每二个成功提交的事物,我们通过undo_sql可以做相反的操作,将数据库的某个事物闪回,如对应的delete操作,我们执行

undo_sql语句来插入数据,从而实现事物的闪回

OPERATION
--------------------------------
UNDO_SQL
---------------------------------------------------------------------

INSERT
delete from "TEST3"."TEST1" where ROWID = 'AAANJvAAEAAAF60AAC';

INSERT
delete from "TEST3"."TEST1" where ROWID = 'AAANJvAAEAAAF60AAB';

INSERT
delete from "TEST3"."TEST1" where ROWID = 'AAANJvAAEAAAF60AAA';


DELETE
insert into "TEST3"."TEST1"("ID") values ('1');

 

select xid,operation from flashback_transaction_query where table_name ='TEST1';
从输出知道表test1包含2个事物030029007C020000这个代表插入,
090007009C020000这个代表删除,这样我们可以通过undo_sql语句将整个数据闪回

XID              OPERATION
---------------- ----------------------
030029007C020000 INSERT
030029007C020000 INSERT
030029007C020000 INSERT
090007009C020000 DELETE

 

 

闪回逐步查询
闪回查询是查询该表过去的某个时刻的数据情况,一旦确认某个时刻的数据满足我们的需求以后,可以根据这个时间执行闪回表,这

里是逐步闪回,即先查询等确认后再一次闪回到需要时刻

启动实验
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2013-10-06 15:43:23
--查看现在的时间,
我并且对刚才的表插入了N次数据
insert into test1 values(1); 我插了N次
SQL> select count(*) from test1;

  COUNT(*)
----------
        11
之前插入了3条数据,然后删了1条数据,现在又插入了9条数据,总共11条。
现在我们逐步查询表中的数据
select count(*) from test1 as of timestamp to_date('2013-10-06 15:43:23','yyyy-mm-dd hh24:mi:ss');
 COUNT(*)
---------
        2


select count(*) from test1 as of timestamp to_date('2013-10-06 15:45:23','yyyy-mm-dd hh24:mi:ss');

  COUNT(*)
----------
        11

通过2次查询,我们找到了要闪回到的时间点,下面我们可以依据该时间点创建一个共有视图,使得其他用户可以看到
create view test1_view
as
select * from test1 as of timestamp to_date('2013-10-06 15:45:23','yyyy-mm-dd hh24:mi:ss');

创建共有同义词
create public synonym ttt for test1_view;

 

 

复原技术点
复原顾名思义将数据恢复到该点的状态
create restore point p1;
select name,scn,storage_size,guarantee_flashback_database from v$restore_point;
创建了复原点,无非就是SCN的别名,如果依赖闪回日志数据的话,oralce会自动保存复原点之后的闪回日志并不会被删除。
create restore point p2 guarantee flashback database;
drop restore point p1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值