Welcome 微信登录

首页 / 数据库 / MySQL / Oracle: flashback version query示例

flashback version query不是Oracle的什么新特性,但10g、11g都在9i基础上做了功能增强,在某些场合可能会用到。下面利用示例展示一下他的概念;
 
  1. Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0   
  2. Connected as hr  
  3.    
  4. SQL> show user;  
  5. User is "hr"  
  6.    
  7. SQL> show parameter undo  
  8.    
  9. NAME                                 TYPE        VALUE  
  10. ------------------------------------ ----------- ------------------------------   
  11. undo_management                      string      AUTO  
  12. undo_retention                       integer     9000  
  13. undo_tablespace                      string      UNDOTBS1  
  14.    
  15. SQL> truncate table t1;  
  16.    
  17. Table truncated  
  18.    
  19. SQL> select systimestamp from dual;  
  20.    
  21. SYSTIMESTAMP  
  22. --------------------------------------------------------------------------------   
  23. 31-DEC-11 02.58.26.560000 PM +08:00  
  24.    
  25. SQL> insert into t1 values(1,"jash");  
  26.    
  27. 1 row inserted  
  28.    
  29. SQL> commit;  
  30.    
  31. Commit complete  
  32.    
  33. SQL> update t1 set name ="bob" where id =1;  
  34.    
  35. 1 row updated  
  36.    
  37. SQL> commit;  
  38.    
  39. Commit complete  
  40.    
  41. SQL> select systimestamp from dual;  
  42.    
  43. SYSTIMESTAMP  
  44. -----------------------------------------   
  45. 31-DEC-11 02.59.04.318000 PM +08:00  
  46.    
  47. SQL>   
  48. SQL> SELECT versions_startscn, versions_starttime,  
  49.   2         versions_endscn, versions_endtime,  
  50.   3         versions_xid, versions_operation,  
  51.   4         id, name  
  52.   5    FROM hr.t1  
  53.   6    VERSIONS BETWEEN TIMESTAMP  
  54.   7        TO_TIMESTAMP("2011-12-31 14:58:26""YYYY-MM-DD HH24:MI:SS")  
  55.   8    AND TO_TIMESTAMP("2011-12-31 14:59:04""YYYY-MM-DD HH24:MI:SS");  
  56.    
查询结果列标题有些长,我做了截断,要不然整行显示不下,请对照上面的查询语句看列标题;
 
  1. SQL>   
  2. SQL> insert into t1 values(2,"clark");  
  3.    
  4. 1 row inserted  
  5. SQL> insert into t1 values(3,"pig");  
  6.    
  7. 1 row inserted  
  8. SQL> insert into t1 values(4,"duck");  
  9.    
  10. 1 row inserted  
  11.    
  12. SQL> commit;  
  13.    
  14. Commit complete  
  15.    
  16. SQL>   
  17. SQL> update t1 set name="kate" where id=2;  
  18.    
  19. 1 row updated  
  20. SQL> update t1 set name="luna" where id=2;  
  21.    
  22. 1 row updated  
  23.    
  24. SQL> commit;  
  25.    
  26. Commit complete  
  27.    
  28. SQL> select systimestamp from dual;  
  29.    
  30. SYSTIMESTAMP  
  31. --------------------------------------------------------------------------------   
  32. 31-DEC-11 03.05.31.071000 PM +08:00  
  33.    
  34. SQL>   
  35. SQL> SELECT versions_startscn, versions_starttime,  
  36.   2         versions_endscn, versions_endtime,  
  37.   3         versions_xid, versions_operation,  
  38.   4         id, name  
  39.   5    FROM hr.t1  
  40.   6    VERSIONS BETWEEN TIMESTAMP  
  41.   7        TO_TIMESTAMP("2011-12-31 14:58:26""YYYY-MM-DD HH24:MI:SS")  
  42.   8    AND TO_TIMESTAMP("2011-12-31 15:05:31""YYYY-MM-DD HH24:MI:SS");  
 做一下简要描述:第六行:start_scn:3852006 end_scn:3852023 operation:I(insert)      表示插入values(1,"jash")第五行:start_scn:3852023                                  operation:U(update)  表示更新"bob" id为1的记录,所以第六行新插入的数据被更新了;... ...... ...可以看到通过查询可以找到所关注行的版本记录,其中必须存在于undo回滚段中,commit已提交的事务,呵呵; 最后看一下官方文档的概述:Oracle Flashback features use the Automatic Undo Management (AUM) system to obtain metadata and historical data for transactions. They rely on undo data, which are records of the effects of individual transactions. For example, if a user runs an UPDATE statement to change a salary from 1000 to 1100, then Oracle Database stores the value 1000 in the undo data.Undo data is persistent and survives a database shutdown. By using flashback features, you can use undo data to query past data or recover from logical damage. Besides using it in flashback features, Oracle Database uses undo data to perform these actions:?Roll back active transactions?Recover terminated transactions by using database or process recovery?Provide read consistency for SQL queriesOracle存储过程无法调试Oracle: OCA-047-题解与实验相关资讯      Oracle基础教程 
  • Oracle块编程返回结果集详解  (11/10/2013 10:45:58)
  • Oracle基础教程之设置系统全局区  (08/22/2013 14:24:00)
  • Oracle基础教程知识点总结  (06/18/2013 07:43:32)
  • Oracle基础教程之tkprof程序详解  (10/22/2013 11:49:50)
  • Oracle基础教程之sqlplus汉字乱码  (07/18/2013 16:30:00)
  • Oracle 管理之 Linux 网络基础  (02/16/2013 18:37:35)
本文评论 查看全部评论 (0)
表情: 姓名: 字数