技术开发 频道

DB2 V9.7当前已落实

    示例

    在示例数据库 SAMPLE 中,存在 RHETTE.EMPLOYEE 和 RHETTE.DEPARTMENT 两张表,我们分别打开两个 DB2 CLP 窗口,分别称为窗口 1 和窗口 2,在窗口 1 中连上示例数据库 SAMPLE,更新表 RHETTE.EMPLOYEE,并试图读取表 RHETTE.DEPARTMENT,在窗口 2 中连上示例数据库 SAMPLE,更新表 RHETTE.DEPARTMENT,并试图读取表 RHETTE.EMPLOYEE,如果不启用“当前已落实”,将会产生一个死锁,并使其中一个应用程序失败,具体如清单 1 所示:

清单 1. 不启用 CC 情况下读操作与写操作堵塞示例

- - 窗口 1 
 C:\> db2 connect to sample 

   数据库连接信息

 数据库服务器         = DB2 / NT 9.7.0 
 SQL 授权标识         = RHETTE 
 本地数据库别名       = SAMPLE 

 C:\> db2 update db cfg using cur_commit DISABLED 
 DB20000I  UPDATE DATABASE CONFIGURATION 命令成功完成。
 SQL1363W  未动态更改为立即修改而提交的一个或多个参数。
           对于这些配置参数,必须在所有应用程序都与此数据库断开连接之后,更改才会生效。

 C:\> db2 force applications all 
 DB20000I  FORCE APPLICATION 命令成功完成。
 DB21024I  此命令为异步的,可能未能立即生效。

 C:\>db2 get db cfg | find "CUR_COMMIT" 
 当前已落实   ( CUR_COMMIT ) = DISABLED 

 C:\> db2 connect to sample 

   数据库连接信息

 数据库服务器         = DB2 / NT 9.7.0 
 SQL 授权标识         = RHETTE 
 本地数据库别名       = SAMPLE 

 C:\> db2 +c update rhette.employee set firstnme = ' CHRISTINE1 ' where empno = 00010 
 DB20000I  SQL 命令成功完成。

 C:\> db2 +c select * from rhette.department 

 DEPTNO DEPTNAME         			 MGRNO  ADMRDEPT LOCATION 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 A00    SPIFFY COMPUTER SERVICE DIV.      000010 		 A00      - 
 B01    PLANNING                          	 000020 		 A00      - 
 C01    INFORMATION CENTER               000030 		 A00      - 
 D01    DEVELOPMENT CENTER                 -      	 A00      - 
 D11    MANUFACTURING SYSTEMS          000060 		 D01      - 
 D21    ADMINISTRATION SYSTEMS          000070 		 D01      - 
 E01    SUPPORT SERVICES                   000050 		 A00      - 
 E11    OPERATIONS                         000090 		 E01      - 
 E21    SOFTWARE SUPPORT                 	 000100 	 E01      - 
 F22    BRANCH OFFICE F2                     -      	 E01      - 
 G22    BRANCH OFFICE G2                     -      	 E01      - 
 H22    BRANCH OFFICE H2                     -      	 E01      - 
 I22    BRANCH OFFICE I2                     -      	 E01      - 
 J22    BRANCH OFFICE J2                     -      	 E01      - 

  14 条记录已选择。

 - - 窗口 2 

 C:\> db2 connect to sample 

   数据库连接信息

 数据库服务器         = DB2 / NT 9.7.0 
 SQL 授权标识         = RHETTE 
 本地数据库别名       = SAMPLE 


 C:\> db2 +c update rhette.department set deptname = ' PLANNING1 ' where deptno = 'B01' 
 DB20000I  SQL 命令成功完成。

 C:\> db2 +c select * from rhette.employee 
 SQL0911N  因为死锁或超时,所以当前事务已回滚。原因码为 " 2 " 。  SQLSTATE = 40001 。
    现在我们在窗口 1 中对示例数据库 SAMPLE 启用“当前已落实”,再次重复上面的操作,可以发现 2 个窗口应用程序都执行成功,没有发生读操作等待写操作(同样没有发生死锁),具体如清单 2 所示:

清单 2. 启用 CC 情况下读操作与写操作不堵塞示例

- - 窗口 1 

 C:\> db2 update db cfg using cur_commit on 
 DB20000I  UPDATE DATABASE CONFIGURATION 命令成功完成。
 SQL1363W  未动态更改为立即修改而提交的一个或多个参数。
           对于这些配置参数,必须在所有应用程序都与此数据库断开连接之后,更改才会生效。

 C:\> db2 force applications all 
 DB20000I  FORCE APPLICATION 命令成功完成。
 DB21024I  此命令为异步的,可能未能立即生效。

 C:\> db2 connect to sample 

   数据库连接信息

 数据库服务器         = DB2 / NT 9.7.0 
 SQL 授权标识         = RHETTE 
 本地数据库别名       = SAMPLE 


 C:\> db2 get db cfg | find "CUR_COMMIT" 
 当前已落实                              ( CUR_COMMIT ) = ON 

 C:\> db2 +c update rhette.employee set firstnme = ' CHRISTINE1 ' where empno = 00010 
 DB20000I  SQL 命令成功完成。

 C:\> db2 +c select * from rhette.department 

 DEPTNO DEPTNAME         				 MGRNO  ADMRDEPT LOCATION 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 A00    SPIFFY COMPUTER SERVICE DIV.      000010 		 A00      - 
 B01    PLANNING                          	 000020 		 A00      - 
 C01    INFORMATION CENTER               000030 		 A00      - 
 D01    DEVELOPMENT CENTER                 -      	 A00      - 
 D11    MANUFACTURING SYSTEMS          000060 		 D01      - 
 D21    ADMINISTRATION SYSTEMS          000070 		 D01      - 
 E01    SUPPORT SERVICES                   000050 		 A00      - 
 E11    OPERATIONS                         000090 		 E01      - 
 E21    SOFTWARE SUPPORT                 	 000100 	 E01      - 
 F22    BRANCH OFFICE F2                     -      	 E01      - 
 G22    BRANCH OFFICE G2                     -      	 E01      - 
 H22    BRANCH OFFICE H2                     -      	 E01      - 
 I22    BRANCH OFFICE I2                     -      	 E01      - 
 J22    BRANCH OFFICE J2                     -      	 E01      - 

  14 条记录已选择。

 - - 窗口 2 

 C:\> db2 connect to sample 

   数据库连接信息

 数据库服务器         = DB2 / NT 9.7.0 
 SQL 授权标识         = RHETTE 
 本地数据库别名       = SAMPLE 


 C:\> db2 +c update rhette.department set deptname = ' PLANNING1 ' where deptno = 'B01' 
 DB20000I  SQL 命令成功完成。

 C:\> db2 +c select * from rhette.employee 

 EMPNO  FIRSTNME     MIDINIT    LASTNAME        WORKDEPT(后面省略)
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 000010 CHRISTINE      I       		 HAAS            		 A00      
 000020 MICHAEL       L         	 THOMPSON        		 B01     
 000030 SALLY          A       		 KWAN            		 C01     
 000050 JOHN           B       		 GEYER           		 E01      
 . . . . . . . . . . 

  42 条记录已选择。

0
相关文章