闪回事物查询
都是查询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;