在db2中,带有'with ur'子句的查询允许查询是未提交的读取,mysql中的'with nolock'子句也是如此.在oracle中是否有这样的选项......如果不是为什么?
Nic*_*int 18
Tom为此提供了一个很好的答案:在事务隔离级别上
他说:
READ UNCOMMITTED隔离级别允许脏读.Oracle数据库不使用脏读,也不使用它们.READ UNCOMMITTED隔离级别的基本目标是提供基于标准的定义,允许非阻塞读取.
...
现在,一个允许脏读的数据库...不仅会返回错误的答案,而且还会返回... [答案] ......表中从未存在过.在多用户数据库中,脏读可能是一个危险的功能.就个人而言,我从未见过它的用处......
这里的重点是脏读不是一个特征; 相反,这是一种责任.在Oracle数据库中,它只是不需要.您可以获得脏读 - 无阻塞的所有优点 - 没有任何不正确的结果.
小智 5
Tom Kyte 的答案是正确的 WRT oracle,由于其多版本并发控制 (MVCC) 架构,没有脏读之类的东西。
从应用功能的角度,我完全同意Tom;没有充分的理由或脏读。
为什么要在 Oracle 之外使用它?在没有 MVCC(例如 MySQL、Ingres)的情况下,如果没有正确调整,它是解决锁定问题的一个技巧,这些问题可能会降低性能或导致锁定系统“用完锁”。与您需要在 Oracle 中调整回滚/撤消的方式相同,您需要管理非 MVCC 数据库中的锁定系统。
那么为什么它可能对 Oracle 有用——作为只读函数的性能提升,其中“错误数据”极不可能且非常无关紧要。在 MySQL/DB2/Ingres/Informix(不确定 SQL Server/Sybase)中,它可用于绕过锁管理工具以提高性能。
这是读取不需要一致性的情况的示例:
这是读取需要一致性的情况的示例:
Oracle 甚至没有想到脏读,也不能在不实际失去性能优势的情况下将其“添加为一个特性”(即在 Oracle 的真正 MVCC 架构中获取脏数据需要太多技巧)。
| 归档时间: |
|
| 查看次数: |
33915 次 |
| 最近记录: |