1 - Bilan
db2pd -wlocks -db $DB2DBDFT
Cette commande liste les "applications DB2" (champ AppHandl) à la source d'un verrouillage et celles en attente de la levée du verrou. Si la commande n'affiche qu'une ligne avec l'heure - il n'y a pas de verrou - l'éventuel blocage n'est pas dû à DB2.
exemple :
Database Partition 0 - Database HRADEV - Active - Up 0 days 10:38:38
Locks being waited on :
AppHandl [nod-index] TranHdl Lockname Type Mode Conv Sts CoorEDU AppName AuthID AppID
21917 [000-21917] 8 00020004000000000840000652 Row ..X G 5160 db2bp HRADEV *LOCAL.db2inst.100907081854
22211 [000-22211] 2 00020004000000000840000652 Row .NS W 5913 db2bp HRADEV *LOCAL.db2inst.100907073126
...
2 - Détail
db2pd -wlocks -db $DB2DBDFT | grep ^[0-9]| cut -d' ' -f1 | sort -u | while read AppHandldo
echo "$AppHandl \c"
db2pd -apinfo $AppHandl -db $DB2DBDFT | grep 'Application Status'
done
Cette boucle affiche le statut des applications DB2 listée par la commande précédente. Celles indiquant "Lock-wait" sont en attente. Logiquement celle qui ne l'est pas (en espérant qu'elle soit unique) est à la source du blocage.
exemple :
21917 Application Status : UOW-Waiting
22211 Application Status : Lock-wait
22227 Application Status : Lock-wait
22507 Application Status : Lock-wait
22868 Application Status : Lock-wait
22989 Application Status : Lock-wait
3 - Analyse
db2pd -db HRADEV -apinfo 21917Database Partition 0 - Database HRADEV - Active - Up 0 days 10:38:38
Application :
Address : 0x07800000010D3260
AppHandl [nod-index] : 21917 [000-21917]
TranHdl : 11
Application PID : 635088
Application Node Name : unxdev
IP Address: n/a
Connection Start Time : (1283847533)Tue Sep 7 10:18:53 2010
Client User ID : hradev
System Auth ID : HRADEV
Coordinator EDU ID : 10839
Coordinator Partition : 0
Number of Agents : 1
Locks timeout value : NotSet
Locks Escalation : No
Workload ID : 1
Workload Occurrence ID : 210
Trusted Context : n/a
Connection Trust Type : non trusted
Role Inherited : n/a
Application Status : UOW-Waiting
Application Name : db2bp
Application ID : *LOCAL.db2inst.100907081854
ClientUserID : n/a
ClientWrkstnName : n/a
ClientApplName : n/a
ClientAccntng : n/a
Cette commande permet de savoir ce que fait le traitement ... ici db2bp (background process db2) ... En l'occurrence une session SQL interactive. Sur un exemple ci dessous, ou voit que l'application DB2 est déclenchée par un RTSDGN (programme TYBXBGV)
Application :
Address : 0x0780000001166440
AppHandl [nod-index] : 39810 [000-39810]
TranHdl : 8
Application PID : 1044586
Application Node Name : unxdev
IP Address: n/a
Connection Start Time : (1283947142)Wed Sep 8 13:59:02 2010
Client User ID : hradev
System Auth ID : HRADEV
Coordinator EDU ID : 19909
Coordinator Partition : 0
Number of Agents : 1
Locks timeout value : NotSet
Locks Escalation : No
Workload ID : 1
Workload Occurrence ID : 34
Trusted Context : n/a
Connection Trust Type : non trusted
Role Inherited : n/a
Application Status : UOW-Executing
Application Name : RTSDGN
Application ID : *LOCAL.db2inst.100908115903
ClientUserID : n/a
ClientWrkstnName : n/a
ClientApplName : n/a
ClientAccntng : n/a
List of active statements :
*UOW-ID : 326
Activity ID : 6
Package Schema : HR
Package Name : TYBXBGV
Package Version :
Section Number : 7
SQL Type : Static
Isolation : UR
Statement Type : DML, Select (blockable)
4 - Contrôle de présence du processus db2bp :
ps -fp 635088UID PID PPID C STIME TTY TIME CMD
hradev 635088 1 0 10:18:52 - 0:00 /home/db2inst/sqllib/bin/db2bp 1335542A13 5 A
Il se trouve que le paramètre du db2bp affiché est le PID du processus père (suivi ici de A13) : 1335542. Affichez les propriétés du processus, déterminez son propriétaire (numéro de terminal) :
ps -fp 1335542
UID PID PPID C STIME TTY TIME CMD
hradev 1335542 1 0 10:18:51 - pts/19 0:00 -ksh
Ici le terminal est le pts/19. Pour savoir qui en est propriétaire (cela n'a un intérêt que si l'on utilise des comptes Unix nominatifs).
who -X | grep pts/19
pts/19 Sep 23 14:15 jduchemin (192.168.141.73)
grep ^jduchemin /etc/passwd | cut -d: -f5
FR/Compte Admin Jean DUCHEMIN
Contacter la personne concernée pour lui demander de faire un "commit" ou "rollback" de son SQL.
5 - Terminaison
Si l'on souhaite forcer la fin du traitement, utiliser la commande FORCE - dans notre exemple : db2 "force application (21917)". Si cela est sans effet ... passer à la suite :Contrôle de présence du processus :
ps -fp 635088
UID PID PPID C STIME TTY TIME CMD
hradev 635088 1 0 10:18:52 - 0:00 /home/db2inst/sqllib/bin/db2bp 1335542A13 5 A
Assassinat :
kill -9 635088
ps -fp 635088
UID PID PPID C STIME TTY TIME CMD
Aucun commentaire:
Enregistrer un commentaire