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