需要用到event monitor来捕获产生死锁的sqls,具体步骤举例如下:
####Session 1
$ db2 "create event monitor dlockevm for deadlocks with details history write to file '/home/db2inst1/deadlock'"
DB20000I The SQL command completed successfully.
$ db2 set event monitor dlockevm state=1
DB20000I The SQL command completed successfully.
$ db2 drop table t1
dbDB20000I The SQL command completed successfully.
$ db2 drop table t2
DB20000I The SQL command completed successfully.
$ db2 "create table t1 (col1 char(10))"
DB20000I The SQL command completed successfully.
$ db2 "create table t2 (col2 char(10))"
DB20000I The SQL command completed successfully.
$ db2 +c "insert into t1 values('aaa')"
DB20000I The SQL command completed successfully.
$ db2 +c "select * from t2"
COL2
----------
0 record(s) selected.
####Session 2
$ db2 +c "insert into t2 values('bbb')"
DB20000I The SQL command completed successfully.
$ db2 +c "select * from t1"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "2". SQLSTATE=40001
$
$ db2 flush event monitor dlockevm
DB20000I The SQL command completed successfully.
$ db2 set event monitor dlockevm state=0
DB20000I The SQL command completed successfully.
$ pwd
/home/db2inst1/deadlock
$ ls
00000000.evt db2event.ctl
$ db2evmon -path /home/db2inst1/deadlock > deadlock.txt
Reading /home/db2inst1/deadlock/00000000.evt ...
$ more deadlock.txt