DB2 for Linux, UNIX, and Windows 的锁事件,第 3 部分: 使用 DB2 9.7 中的锁事件监控器来解决并发性问题
2010-08-03 00:00:00 来源:WEB开发网在另一个会话中,执行另一个事务,根据现有薪水给每个经理 10% 的奖金,如清单 7 所示。
清单 7. 第二个事务:给所有经理 10% 的奖金
db2 "CONNECT TO SAMPLE"
db2 +c "UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'"
由于第一个事务锁住所有经理和其他员工行,锁超时 10 秒后发生(记住 LOCKTIMEOUT 参数设置),第二个事务的 UPDATE 语句失败。
清单 8. DB2 返回的锁超时错误
SQL0911N The current transaction has been rolled back because of a deadlock or timeout
Reason code "68". SQLSTATE=40001
锁超时事件的信息被写入非格式化表 EMDATA.TAB_LOCKING 中:执行 CREATE EVENT MONITOR 语句时所指定的。为了读取并格式化锁监控器收集的信息,使用名为 db2evmonfmt 的工具,它是用 Java 编写的。在第一次使用前,必须先编译。可以在 DB2 安装目录的 samples 子目录找到该工具的源代码(包括相应 XML 表单的样式表)。在编译 Java 源代码之前,将两个文件(源代码 + 样式表)复制到当前工作目录,如清单 9 所示。
清单 9. 复制 db2evmonfmt 工具的源文件
copy "C:\Program Files\IBM\SQLLIB\samples\java\jdbc\db2evmonfmt.java" .
copy "C:\Program Files\IBM\SQLLIB\samples\java\jdbc\DB2EvmonLocking.xsl" .
需要 JDK (Java Development Kit) 来编译 db2evmonfmt 工具。由于 JDK 是随每个 DB2 服务器产品安装的,可以使用 DB2 安装程序的 Java 编译器(javac)。为了让操作系统找到 Java 编译器,javac 二进制文件必须在调用前包含在 PATH 变量中,如清单 10 所示。
更多精彩
赞助商链接