技术开发 频道

DB2 V9.7当前已落实

    如何获取或请求“当前已落实”

    可以通过配置数据库配置参数 CUR_COMMIT 获取“当前已落实”或者通过 BIND / PRECOMPILE/PREP 命令对其 CONCURRENTACCESSRESOLUTION 子句指定 USE CURRENTLY COMMITTED 或 WAIT FOR OUTCOME 来请求“当前已落实”。

    一、数据库配置参数 cur_commit

    该数据库配置参数主要是用来控制游标稳定性扫描的行为,默认值为 ON,可选值为:

    (1)ON :打开;

    对于新创建的数据库,默认值是 ON,在此情况下,当你试图读取一个正在被其他应用程序修改的行时,将直接返回该行的当前已落实版本数据(也就是首次更改之前的值)。

    (2)AVAILABLE:可用;

    此值表示你的应用需要显式地请求“当前已落实行为”才能得到“当前已落实”结果。

    (3)DISABLED:禁用;

    如果数据库是从之前的版本升级而来,这个参数将被设置成 DISABLED,这是为了和以前版本的行为保持一致。如果你希望使用当前已落实来控制游标稳定性扫描的行为,需要将这个参数更改成 ON 。

    需要注意的是,注册表变量 DB2_EVALUNCOMMITTED、DB2_SKIPDELETED 和 DB2_SKIPINSERTED 在启用 cur_commit 参数后会受到影响。在绑定(BIND)或预编译(PRECOMPILE)时对 CONCURRENTACCESSRESOLUTION 选项指定 USE CURRENTLY COMMITTED 或 WAIT FOR OUTCOME,那么注册表变量 DB2_EVALUNCOMMITTED、DB2_SKIPDELETED 和 DB2_SKIPINSERTED 将被忽略。

    二、BIND 和 PRECOMPILE/PREP 的命令 CONCURRENTACCESSRESOLUTION 子句

    BIND 和 PRECOMPILE/PREP 命令的 CONCURRENTACCESSRESOLUTION 子句主要是为了对程序包中的语句指定使用并行访问解析,语法结构如清单 3 所示:

清单 3. BIND 命令 CONCURRENTACCESSRESOLUTION 子句语法结构

				
>> - BIND - - filename - - - - - - - - - - - - - - - - - - - - - - - - - - > 

 > - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - > 
   ' - CONCURRENTACCESSRESOLUTION - - + - USE CURRENTLY COMMITTED - + - '   
                                 ' - WAIT FOR OUTCOME - - - - - - '    

 - - 清单 3 - 2 . PRECOMPILE/PREP 命令 CONCURRENTACCESSRESOLUTION 子句语法结构

 >> - + - PRECOMPILE - + - - filename - - - - - - - - - - - - - - - - - - -> 
   ' - PREP - - - - - - - '  

 > - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -  + - - - > 
   ' - CONCURRENTACCESSRESOLUTION - - + - USE CURRENTLY COMMITTED - + - '   
                                 ' - WAIT FOR OUTCOME - - - - - - - '
    USE CURRENTLY COMMITTED

    该选项值表示:当数据处于更新或删除的过程中时,指定数据库管理器对扫描行为使用“当前已落实版本”,当行处于插入的过程中时这个设定将被跳过。当隔离级别处于游标稳定性或者读稳定性隔离级别时(对读稳定性隔离级别这个子句将只跳过未提交的插入操作)这个子句将有效,并且将忽略掉其他设置。

    WAIT FOR OUTCOME

    该选项值表示:当遇上数据正处于更新的过程中时,指定游标稳定性或更高的隔离级别扫描等待其提交或回滚完成。当行处于插入或删除的过程中时这些行在扫描时将不再被跳过。这个选项值将会造成 DB2_EVALUNCOMMITTED、 DB2_SKIPDELETED 和 DB2_SKIPINSERTED 不再生效。

0
相关文章