====== DB2 Fixpack installation ======
**Offline backup of all databases **
**Backup configuration of Database manager and all Databases :**
db2 get dbm cfg > dbm_cfg.txt
db2set -all > db2set_all.txt
db2licm -l > db2licm.txt
db2level > db2level.txt
db2cfexp directory.txt backup
db2greg -dump -v > db2greg.txt
for db in `db2 list db directory | grep -p Indirect | grep alias | awk '{print $NF}'`; do db2look -d ${db} -td @ -a -e -x -l -o ddl_${db}.txt; db2 get db cfg for ${db} > dbcfg_${db}.txt; done
**Check invalid objects :**
db2 "select substr(objectschema,1,20) SCHEMA, substr(objectname,1,70) OBJECT, case objecttype when 'B' then 'Trigger' when 'F' then 'Routine' when 'R' then 'User datatype' when 'V' then 'View' when 'v' then 'Global var' when 'y' then 'Row perm.' when 2 then 'Col. mask' when 3 then 'Usage list' end as Type from syscat.invalidobjects with ur"
**Take full backup of all databases**
** Stop all instances and associated services : **
su -
db2stop
initctl stop db2fmcd
** Rotate db2diag log : **
db2diag -A
** Stop DAS (if exists & running) :**
su -
db2admin stop
**Stop Fault monitor :**
/bin/db2fm -i -D
**Clean IPC : **
/sqllib/bin/ipclean
**Check if there aren't any libraries still loaded :**
/instance/db2prechk -b -d;echo $?
#AIX
/usr/bin/genld -l | grep -p db2
#Linux
lsof +D
**Install the fixpack :**
/installFixpack -b
**Update the DB catalogs (all Indirect databases !) :**
db2updv9 -d (9.1)
db2updv97 -d (9.7)
db2updv10 -d (10.x)
In case of errors, rebind the packages :
db2 connect to databasename
db2 bind sqllib/bnd/@db2cli.lst blocking all grant public sqlerror continue
db2 bind sqllib/bnd/db2schema.bnd blocking all grant public sqlerror continue
db2 bind sqllib/bnd/@db2ubind.lst blocking all sqlerror continue grant public
db2 commit
db2 terminate
#or
db2rbind -l all
**Check for inconsistent System catalog :**
db2 "SELECT TABSCHEMA, TABNAME
FROM SYSCAT.DATAPARTITIONS
WHERE INDEX_TBSPACEID = 0 AND
TBSPACEID IS NOT NULL AND
TABSCHEMA NOT IN ('SYSIBM', 'SYSCAT', 'SYSSTAT',
'SYSIBMADM', 'SYSCATV82')
GROUP BY (TABSCHEMA, TABNAME)"
# run db2updv97 -d -i
**Check again invalid objects and try to recompile them :**
db2 "select substr(objectschema,1,20) SCHEMA, substr(objectname,1,70) OBJECT, case objecttype when 'B' then 'Trigger' when 'F' then 'Routine' when 'R' then 'User datatype' when 'V' then 'View' when 'v' then 'Global var' when 'y' then 'Row perm.' when 2 then 'Col. mask' when 3 then 'Usage list' end as Type from syscat.invalidobjects with ur"
**Recompile invalid objects :**
db2 "CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()"
**Post-fixpack script :**
#!/bin/ksh
echo "[`date`] POST-FIXPACK ACTIONS STARTED !"
# BIND & RECOMPILE
for db in `db2 list db directory | grep -p Indirect | grep alias | awk '{print $NF}'`
do
echo "[`date`] UPDATING DB ${db} TO LATEST FIXPACK :"
db2updv97 -d ${db}
echo "------------------------"
echo "[`date`] REBINDING DB ${db} :"
db2 connect to ${db}
db2 bind ~/sqllib/bnd/@db2cli.lst blocking all grant public sqlerror continue
db2 bind ~/sqllib/bnd/db2schema.bnd blocking all grant public sqlerror continue
db2 bind ~/sqllib/bnd/@db2ubind.lst blocking all sqlerror continue grant public
db2 commit
db2 terminate
db2 connect to ${db}
db2 "CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()"
db2 "select substr(objectschema,1,20) SCHEMA, substr(objectname,1,70) OBJECT, case objecttype when 'B' then 'Trigger' when 'F' then 'Routine' when 'R' then 'User datatype' when 'V' then 'View' when 'v' then 'Global var' when 'y' then 'Row perm.' when 2 then 'Col. mask' when 3 then 'Usage list' end as Type from syscat.invalidobjects with ur"
db2 terminate
db2rbind ${db} -l ./rebind_${db}.log all
echo "------------------------"
done
echo "[`date`] POST-FIXPACK ACTIONS FINISHED !"