DB2 9.5 中的锁定超时分析新方法
2008-07-07 16:24:14 来源:WEB开发网清单 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。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接