作为DB2隔离级别之一,未落实的读对于DB2数据库非常重要,下文就为落实的读级别进行了详细的叙述,希望可以使您对DB2隔离级别有更深入的认识。
未落实的读(UR)允许应用程序访问其他事务的未落实的更改。除非其他应用程序尝试删除或改变该表,否则该应用程序也不会锁定正读取的行而使其他应用程序不能访问该行。对于只读和可更新的游标,“未落实的读”的工作方式有所不同。
只读游标可访问大多数其他事务的未落实的更改。但是,当该事务正在处理时,正由其他事务创建或删除的表、视图和索引不能使用。其他事务的任何其他更改在落实或回滚前都可被读取。
注: “未落实的读”隔离级别下的可更新操作的游标将按DB2隔离级别是游标稳定性的方式工作。
当它使用隔离级别 UR 运行程序时,应用程序可以使用DB2隔离级别 CS。发生这种情况的原因是因为在应用程序中使用的游标是模糊游标。由于 BLOCKING 选项,可以将模糊游标升级为隔离级别 CS。BLOCKING 选项的缺省值是 UNAMBIG。这意味着将模糊游标当作可更新的,并且DB2隔离级别升级为 CS。要防止此升级,有两种选择:
* 修改应用程序中的游标。以便这些游标是非模糊游标。将 SELECT 语句更改为包括 FOR READ ONLY 子句。
* 将模糊游标保留在应用程序中,但是预编译程序或使用 BLOCKING ALL 和 STATICREADONLY YES 选项绑定它以允许在运行该程序时将任何模糊游标视为只读游标。
如对扫描 10000 行的“可重复读”给出的示例一样,如果使用“未落实的读”,那么不需要任何行锁定。
使用“未落实的读”,可能出现不可重复读行为和幻像读现象。“未落实的读”隔离级别最常用于只读表上的查询,或者若仅执行选择语句且不关心是否可从其他应用程序中看到未落实的数据时也最常用。