====== Troubleshooting ====== ===== PowerShell ===== **Create $profile :** New-item –type file –force $profile **Setup DB2 profile :** notepad $profile Set-ExecutionPolicy remoteSigned set-item -path env:DB2CLP -value "**$$**" Set-Alias vi notepad Set-Alias ll dir ===== Tracing ===== **Take trace :** db2trc on -l 512m -t **Format trace dump :** db2trc perfrep trc.dmp trc.perf -g -sort timeelapsed -order desc ===== Automatic Maintenance Policies ===== **Extract / Update current configuration policy XML to ~/sqllib/tmp :** * MAINTENANCE_WINDOW * AUTO_BACKUP * AUTO_REORG * AUTO_RUNSTATS db2 "call AUTOMAINT_GET_POLICYFILE('MAINTENANCE_WINDOW','MaintenanceWindow_current.xml')" db2 "call AUTOMAINT_SET_POLICYFILE('MAINTENANCE_WINDOW','MaintenanceWindow_NEW.xml')" ===== Applications ===== db2aic - Asynchronous Index cleaner db2taskd - Task distribution daemon **Workaround for slow rollback - disable logging in flight recorder (> 10.5 FP6):** db2pd -db -dmpevrec comp=SQLRA name=sqlraMED mask=0 db2pd -db -dmpevrec comp=SQLRA name=sqlraLOW mask=0 **Automatic forcing of idle applications :** db2 "create threshold for database activities enforcement database enable when connectionidletime > **Terminate FMP (hung sub-agent) :** db2pd -fmp (search for active threads) FMP Process: Address FmpPid Bit Flags ActiveThrd PooledThrd ForcedThrd Active IPCList 0x07800000077BD000 38732016 64 0x00000002 2 1 0 Yes 0x0780000006FD1600 Active Threads: Address FmpPid EduPid ThreadId 0x0780000006D3FDC0 38732016 13369 1029 0x0780000006FD0A80 38732016 20027 1286 db2fmpterm 38732016 ** find package name for bind file :** ddcspkgn db2_adminotm.bnd ===== CPU ===== **Check CPU utilization of DB2 processes :** ps -ef | grep db2sysc top -Hp ps -Lp -o pid,ppid,pcpu,pmem,lwp db2pd -edus db2 get snapshot for applications on | grep -ie "application handle" -e "coordinator agent" ===== Memory ===== **OS Memory :** svmon | awk '/memory/ { fm=$4; ms=$2; } /pg space/ {print "percent available: " ((fm+$3-$4)/(ms+$3)*100) "%"}' **Memory set usage :** db2 "select substr(HOST_NAME,1,25) as HOST_NAME, substr(DB_NAME,1,10) as DBNAME, MEMORY_SET_TYPE, MEMORY_SET_ID, MEMORY_SET_SIZE, MEMORY_SET_COMMITTED, MEMORY_SET_USED, MEMORY_SET_USED_HWM from table(MON_GET_MEMORY_SET(null,null,-2)) as t with ur" **Memory pools usage :** db2 "select substr(HOST_NAME,1,25) as HOST_NAME, substr(DB_NAME,1,10) as DBNAME, MEMORY_SET_TYPE, MEMORY_POOL_TYPE, MEMORY_POOL_ID, APPLICATION_HANDLE, EDU_ID, MEMORY_POOL_USED, MEMORY_POOL_USED_HWM from table(MON_GET_MEMORY_POOL(null,null,-2)) as t with ur" **Locks (LOCKLIST/MAXLOCKS) :** db2 "select name, substr(value,1,16) value, value_flags, substr(deferred_value,1,16) deferred_value, deferred_value_flags, substr(datatype,1,16) datatype from SYSIBMADM.DBCFG where name='locklist' with ur" ===== Diagnostic logs ===== **How to Interpret DB2 Hex codes in db2diag.log :** Verify the calculator is set to View->Scientific Select Hex Enter 8 F's Enter '-' Enter 'FFFFE60A' Enter '=' will result in 19F5 Enter '+' Enter '1' Enter '=' will result in 19F6 Select Dec will result in 6646 ===== Troubleshooting ===== **Cleaning all IPC semaphores :** ipcs | grep db2inst1 | awk '{print " ipcrm -"$1" "$2 }' > ipc_remove.ksh chmod u+x ipc_remove.ksh;./ipc-remove.ksh ===== DB2 Support ===== **Collecting support data :** db2support . -d -c -cl 1 -f -sf MYSQL.sql **Taking (wrapped) trace of statement execution :** db2 -x "values application_id()" <*LOCAL.smkivell.141129222232> db2trc on -l 1G -appid <*LOCAL.smkivell.141129222232> db2 "" db2trc dump trace.dmp db2trc off db2trc flw trace.dmp trace.flw db2trc fmt trace.dmp trace.fmt **Taking full dump to file for current statement :** db2 -x "values application_id()" <*LOCAL.smkivell.141129222232> db2trc on -f trace.dmp -appid <*LOCAL.smkivell.141129222232> db2 "" db2trc off db2trc flw trace.dmp trace.flw db2trc fmt trace.dmp trace.fmt **Catching SQL error in db2diag.log :** db2pdcfg -catch <-802> db2 " db2pdcfg -catch clear **Callout script for SQL error :** * Create script db2cos and move it into ~/sqllib #!/bin/sh # DB2 Callout script to collect information for SQL1224 echo "Collecting information for SQL1224">>db2cos.rpt echo "db2cos script executed at `date`" >>db2cos.rpt db2pd -agents >>db2cos.rpt * Start catching of specified error db2pd -catch clear all db2pd -catch -1224 **Collect table's PD (Packed Descriptor) area :** DB2SVCPW=FXMPTRMT; export DB2SVCPW DB2CAT=SERVICE;export DB2CAT db2cat -d -n -s -f current_.pd -o db2cat_c_.out **Flush bufferpoools to disk :** db2pdcfg -flushbp **Configure TCP Keep Alive :** Let's say for example you do 'db2set DB2TCP_SERVER_KEEPALIVE_TIMEOUT=12000'. TCP_KEEPIDLE will be set to '12000 / 3 = 4000' (in seconds). This means that we will start sending 'keepalive' probes after the connection has been idle for 4000 seconds. TCP_KEEPINTVL will be set to '(12000 - 4000) / 10 = 800' meaning that a 'keepalive' probe will be sent every 800 seconds. TCP_KEEPCNT will be set to 10 meaning that a connection will be dropped after 10 unresponsive 'keepalive' probes. **Analyze DB structure with db2dart - DB MUST BE DEACTIVATED ! :** db2dart /T /TSI /OI /RPT . /RPTN **Trace specific query :** QUERYFILE=$1 # first connect to the db db2 connect to DBDWHR db2 "set current degree = '4' " # figure out what application handle I am MON_OUTPUT=$(db2 "values(mon_get_application_handle)") echo $MON_OUTPUT APPHDL=$(echo $MON_OUTPUT | awk '{print $3}') echo "My application handle is $APPHDL" # turn on trace for ri, dms and ixm echo TRCCMD="db2trc on -f trace.dmp -t -m \"SQLRI, SQLD, SQLI\" -apphdl $APPHDL" echo "Turning on trace:" echo "$TRCCMD" echo eval $TRCCMD echo echo "Executing query now:" db2 -tvf $QUERYFILE echo echo "turning trace off" db2trc off echo echo "formatting trace flw" db2trc flw -rds -t trace.dmp trace.flw echo echo "formatting trace fmt" db2trc fmt trace.dmp trace.fmt echo echo "please grab trace.dmp, trace.flw, and trace.fmt" echo db2 terminate **Sort heap monitoring :** The easiest way to monitor for this condition is by using the snap_get_agent_memory_pool routine as follows : db2 "SELECT AGENT_ID, AGENT_PID, DBPARTITIONNUM, POOL_ID, POOL_CUR_SIZE FROM TABLE(SNAP_GET_AGENT_MEMORY_POOL('SAMPLE',-2)) A WHERE POOL_ID='SORT' AND POOL_CUR_SIZE > 20000". Replacing 'SAMPLE' with the database name and '20000' with a value larger than SORTHEAP, eg. 2 * SORTHEAP. When using STMM, the value may have to be larger - monitor the db2diag.log for normal SORTHEAP settings and use a value above that. **Show me users which source DB2 profiles :** for user in `awk -F: '{print $1}' /etc/passwd`; do grep -i db2 ~${user}/.profile 2>/dev/null && echo $user ; done **Checking RID/RID_BIT of a specific rows + delete duplicates with it :** db2 "select int(rid()/65536) as page,mod(rid(),65536) as slot,key,data from ridtest" db2 "delete from ridtest where rid() = (0*65536+4)" db2 "select int(rid()/65536) as page,mod(rid(),65536) as slot,key,data from ridtest" ===== DB2 Global registry ===== DB2 Global registry is in /var/db2 (or show it with db2greg -g) **Dump Global registry :** db2greg -dump db2greg -dump -v **Add new instance into DB2 Global registry :** db2greg -addinstrec service=DB2,instancename=db2inst2 **Change instance path :** db2greg -addinstrec service=DB2,instancename=db2inst2 ===== DB2 Corruptions ===== **Index corruption :** db2 "select TBSPACEID, IID, INDEX_OBJECTID from syscat.indexes where tabname=''" db2dart /DI /TSI /OI /PS 0 /NP 1 /V Y **Table corruption - SQL1477N (nonrecoverable load) :** db2dart /DDEL -> insert ,,, **Inspect table :** db2 "inspect check table name TEST results keep inspect.txt" db2inspf inspect.txt inspect_TEST.txt **Datapage corruption :** type:0 corruption -> IBM Support type:1 corruption -> db2dart : type:>128 -> index corruption: **Inspect DB for corruption with db2dart :** For the entire database: db2dart /d For the tablespace: db2dart /ts /tsi For the table: db2dart /t /oi /tsi ===== Processes ===== **Terminate fenced process : ** db2fmpterm **IOCP (AIX):** smitty iocp lsdev mkdev ... **See AIX environment variables of the process :** ps ewww PID | tr ' ' '\012' | grep = | sort **Tracing opened files :** db2trc on -f trc.raw -Madd sqloopenp -Madd sqloclose **List opened files :** AIX: # procfiles -n SOLARIS: # pfiles LINUX: # lsof -p ===== Instance configuration ===== **Rename database :** * Prepare input file for db2relocatedb command : DB_NAME=REPLICA1,REPLICA2 DB_PATH=/db2/db2inst1/data_01 INSTANCE=db2inst1 * Rename the DB directory to new name * Execute db2relocatedb db2relocatedb -f relocate_rename.txt ===== DB2 Fault Monitor ===== **DB2 Fault monitor registry :** fm..reg. db2fm -i -I /60 ===== Packages ===== **DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002, SQLERRMC=NULLID.SYSLH203 0X5359534C564C3031, DRIVER=4.12.55 :** db2 "select varchar(PKGSCHEMA,20) SCHEMA, PKGNAME FROM SYSCAT.PACKAGES WHERE PKGSCHEMA = 'NULLID' and PKGNAME like 'SYSLH20%' with ur" db2 bind ~/sqllib/bnd/@db2cli.lst blocking all grant public sqlerror continue CLIPKG 5