WEB开发网
开发学院数据库DB2 DB2 9.5 中的锁定超时分析新方法 阅读

DB2 9.5 中的锁定超时分析新方法

 2008-07-07 16:24:14 来源:WEB开发网   
核心提示: 清单 3. 更改 LOCKTIMEOUT 的值db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT 10"为了促使一个锁定超时错误发生,我们首先建立一个数据库连接,DB2 9.5 中的锁定超时分析新方法(3),并执行一些 SQL

清单 3. 更改 LOCKTIMEOUT 的值

db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT 10"

为了促使一个锁定超时错误发生,我们首先建立一个数据库连接,并执行一些 SQL 语句来模拟表 EMPLOYEE 上的真实事务:

清单 4. 第一个事务将每个员工的工资提高 2%

db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE EMPLOYEE SET SALARY = SALARY * 1.02"
db2 +c "SELECT LASTNAME, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY LASTNAME ASC"

到目前为止,这个事务包含一个 UPDATE 命令,该命令将每个员工的工资提高 2%。然后,使用 SELECT 语句查询新的工资。注意,通过为 DB2 命令行处理程序(CLP)调用指定 +c 选项,我们禁用了自动提交功能。UPDATE 语句会导致 EMPLOYEE 表中的每行上发生一个独占(X)锁。这些独占锁会一直持续下去,直到使用 COMMIT 或 ROLLBACK 语句结束事务。

不需要结束事务,在一个单独的 shell 中建立第二个数据库连接并开始另一个事务:

清单 5. 第二个事务为每位经理提供 10%(取决于他们的工资)的奖金

db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'"

这个事务的用途是,根据每位经理的当前工资,为他们提供 10% 的奖金。由于 EMPLOYEE 表中的所有行都被第一个事务独占锁定,第二个应用程序进入了锁等待模式。10 秒钟之后(还记得 LOCKTIMEOUT 的设置吧),就会发生预期的锁定超时。

目前为止还没有出现什么新内容。但是由于 DB2 注册变量 DB2_CAPTURE_LOCKTIMEOUT 被设置为 ON,锁定超时报告处于激活状态,DB2 会在 DIAGPATH 目录中自动生成锁定超时报告。注意,DB2 9.5 for Windows 中默认的 DIAGPATH 发生了改变。如果 DIAGPATH 参数未设置,DIAGPATH 会指向目录 DB2INSTPROFDB2INSTANCE,其中 DB2INSTPROF 是实例目录的位置,而 DB2INSTANCE 是 DB2 实例的名称。要确定存储在 DB2INSTPROF 中的路径,可以通过执行 db2set -all 命令显示 DB2 注册内容。如果在默认实例中创建 SAMPLE 数据库,那么 DB2INSTANCE 的值为 DB2。报告文件的名称为 db2locktimeout.dbpartition.agentid.timestamp,对于单分区的数据库,其中的 dbpartition 始终为 0。

上一页  1 2 3 4 5 6 7  下一页

Tags:DB 锁定 超时

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接