flashback总结五之Flashback_Query_Version(上)

    相对于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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值