相对于Flashback Query的以点看对象状态,那么Flashback Version Query可以以面开看对象状态。
这样根据历史情况,DBA可以快速判断数据在什么地方出现错误,进而恢复到到之前的状态。
Flashback version Query中有一个伪列,是用来记录每次commit之后,新产生的scn。
******************************个人操作********************************
SQL> insert into scott.emp values(7968,'sheng','CLERK',7902,to_date('2011-09-09'
,'YYYY-mm-dd'),'800','300',20);
已创建 1 行。
SQL> commit;
SQL> select ora_rowscn, empno from scott.emp;
ORA_ROWSCN EMPNO
---------- ----------
3466170 7369
3466170 7499
3466170 7521
3466170 7566
3466170 7654
3466170 7698
3466170 7782
3466170 7788
3466170 7839
3466170 7844
3466170 7876
ORA_ROWSCN EMPNO
---------- ----------
3466170 7900
3466170 7902
3466170 7934
3466170 7968(7968出现,当前的scn也改变了)
3466170 7964
再来插入一条看看,
SQL> insert into scott.emp values(7970,'dong','CLERK',7902,'2011-09-09','800','3
00',20);
已创建 1 行。
SQL> commit;
SQL> select ora_rowscn, empno from scott.emp;
ORA_ROWSCN EMPNO
---------- ----------
3466203 7369
3466203 7499
3466203 7521
3466203 7566
3466203 7654
3466203 7698
3466203 7782
3466203 7788
3466203 7839
3466203 7844
3466203 7876
ORA_ROWSCN EMPNO
---------- ----------
3466203 7900
3466203 7902
3466203 7934
3466203 7970(7970出现,ORA_ROWSCN记录也相应的改变了)
3466203 7968
3466203 7964
SQL> Select versions_xid,versions_startscn,versions_endscn,
DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Original') "Operation", empno from scott.emp
versions between scn minvalue and maxvalue;
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
Original 7369
Original 7499
Original 7521
Original 7566
Original 7654
Original 7698
Original 7782
Original 7788
Original 7839
Original 7844
Original 7876
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
Original 7900
Original 7902
Original 7934
Original 7964
09001F00AF040000 3466170 Insert 7968
09000D00B0040000 3466203 Insert 7970
已选择17行。
从上面语句可以看出,Operation的操作,有两条插入操作,分别对应的scn是3466170和3466203。
如果,你想退回到,插入7970之前,可以进行如下操作:
**************************这个是flashback table的概念********************************
SQL> flashback table scott.emp to scn 3466170;
flashback table scott.emp to scn 3466170
*
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表
由于报错,我可以查看row_movement是否启用
SQL> select row_movement,table_name from user_tables where table_name='EMP';
ROW_MOVE TABLE_NAME
-------- ------------------------------
DISABLED EMP
(
--启用
JSSWEB> ALTER TABLE table_name ENABLE ROW MOVEMENT;
表已更改。
--禁止
JSSWEB> ALTER TABLE table_name DISABLE ROW MOVEMENT;
表已更改。
这个是启用和禁用语句
)
SQL> ALTER TABLE EMP ENABLE ROW MOVEMENT;
表已更改。
SQL> flashback table scott.emp to scn 3466170;
闪回完成。
**************************这个是flashback table的概念********************************
SQL> select ora_rowscn, empno from scott.emp;
ORA_ROWSCN EMPNO
---------- ----------
3468264 7369
3468264 7499
3468264 7521
3468264 7566
3468264 7654
3468264 7698
3468264 7782
3468264 7788
3468264 7839
3468264 7844
3468264 7876
ORA_ROWSCN EMPNO
---------- ----------
3468264 7900
3468264 7902
3468264 7934
3468264 7968
3468264 7964
已选择16行。(可以看到,原来插入的7970已经没有了,我们回到了插入7970之前的状态)
现在可以分析闪回之后,flashback_Qurey_Version的状态是什么样子的?
SQL> Select versions_xid,versions_startscn,versions_endscn,
2 DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Or
ginal') "Operation", empno from scott.emp
3 versions between scn minvalue and maxvalue;
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
01001300D2030000 3468264 Insert 7369
01001300D2030000 3468264 Delete 7369
3468264 Original 7369
01001300D2030000 3468264 Insert 7499
01001300D2030000 3468264 Delete 7499
3468264 Original 7499
01001300D2030000 3468264 Insert 7521
01001300D2030000 3468264 Delete 7521
3468264 Original 7521
01001300D2030000 3468264 Insert 7566
01001300D2030000 3468264 Delete 7566
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
3468264 Original 7566
01001300D2030000 3468264 Insert 7654
01001300D2030000 3468264 Delete 7654
3468264 Original 7654
01001300D2030000 3468264 Insert 7698
01001300D2030000 3468264 Delete 7698
3468264 Original 7698
01001300D2030000 3468264 Insert 7782
01001300D2030000 3468264 Delete 7782
3468264 Original 7782
01001300D2030000 3468264 Insert 7788
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
01001300D2030000 3468264 Delete 7788
3468264 Original 7788
01001300D2030000 3468264 Insert 7839
01001300D2030000 3468264 Delete 7839
3468264 Original 7839
01001300D2030000 3468264 Insert 7844
01001300D2030000 3468264 Delete 7844
3468264 Original 7844
01001300D2030000 3468264 Insert 7876
01001300D2030000 3468264 Delete 7876
3468264 Original 7876
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
01001300D2030000 3468264 Insert 7900
01001300D2030000 3468264 Delete 7900
3468264 Original 7900
01001300D2030000 3468264 Insert 7902
01001300D2030000 3468264 Delete 7902
3468264 Original 7902
01001300D2030000 3468264 Insert 7934
01001300D2030000 3468264 Delete 7934
3468264 Original 7934
01001300D2030000 3468264 Insert 7964
01001300D2030000 3468264 Delete 7964
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio EMPNO
---------------- ----------------- --------------- -------- ----------
3468264 Original 7964
01001300D2030000 3468264 Insert 7968
01001300D2030000 3468264 Delete 7968
3468264 Original 7968
01001300D2030000 3468264 Delete 7970
3468264 Original 7970
已选择50行。
(可能有点长,不过耐心的观察可以发现,每一个都是有一个insert和delete的操作,这个就是闪回它做的操作,
最后一个7970做了delete之后,就没有insert了,所以7970被删除了)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26446098/viewspace-712205/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26446098/viewspace-712205/