新博客http://www.cnblogs.com/zhjh256 欢迎访问
分类: Oracle
2008-01-06 21:40:14
任何数据库产品都面临的一个问题是:当一个用户在读取数据时,数据在底层被其他用户更改时将如何?不同的数据库产品将显示不同的结果,有些显示未提交的数据,有些不会显示未提交的数据,还有些则根据编程确定。
为什么称看不到正在更改的数据为“读一致性”?
因为其不会仅应用正在更改的数据,而仅仅会应用已经更改的数据。规则是你将看不到任何在你查询开始前还没有提交,确定的数据。并且在你查询开始后,数据被更改并且在查询结束前提交,查询也将看不到数据。
Oracle怎么知道回滚的数据应该像什么?
更改数据的事务产生重做和撤销,并且撤销是数据的前像。撤销段内一个撤销的具体位可以通过在每个数据文件块头的记录找到。
因此查询读取数据块头时,可以找到用来回滚那个块到特定时间的必需的撤销,并且使用全部的那些撤销来的准备一致性读。
当一个查询执行时,将被赋予一个SCN,并且拷贝的数据根据SCN被回滚到具体的时间。
如果查询运行N天呢?
在这种情况下最好能够确保撤销能够回滚到N天以前,否则查询将会失败并返回ORA-1555 Snapshot Too Old。
在Oracle 10g, UNDO_RETENTION自动设置为最长的查询的大小,如果没有显示设置其他UNDO相关的参数,因此,通常会有足够的撤销。
在Oracle 9i,可以设置UNDO_RETENTION为确保UNDO的最大值。
chinaunix网友2008-06-08 23:59:06
谢谢博主. 我刚接触oracle不久,请问新人开始怎么学好oracle,我正在看清华大学出版社的那本oracle 9i for win 数据库教程(基础篇),请问您开始是怎么学的?请谈一下您开始学oracle的体会.
chinaunix网友2008-05-22 23:50:52
您好,我想问一下文中的这个地方 ----> “在这种情况下最好能够确保撤销能够回滚到N天以前” 。就是数据都提交了干嘛还有回滚啊