====== DB2 Log management ====== == Total logs used == db2 "select LOG_UTILIZATION_PERCENT, TOTAL_LOG_USED_KB/1024 MB_USED, TOTAL_LOG_USED_TOP_KB/1024 MB_TOP, TOTAL_LOG_AVAILABLE_KB/1024 MB_AVAILABLE from sysibmadm.log_utilization" **Log used for connected apps :** db2 "select APPLICATION_ID, UOW_START_TIME, NUM_LOCKS_HELD, UOW_LOG_SPACE_USED from table(MON_GET_UNIT_OF_WORK(NULL,-2)) as t with ur" **Log paths for all DBs :** for db in `db2 list db directory | grep -p Indirect | grep alias | awk '{print $NF}'`; do echo "${db} : `db2 get db cfg for ${db} | grep log | grep Path | awk '{print $NF}'`"; done ---- == Switch to archival logging == db2 "CONNECT TO HADR01"; QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS; UNQUIESCE DATABASE; CONNECT RESET; CONNECT TO HADR01; UPDATE DATABASE CONFIGURATION USING logarchmeth1 "DISK:/db2logs/archive" newlogpath "/db2logs" logprimary 3 logsecond 2 logfilsiz 1000 LOGINDEXBUILD OFF ; CONNECT RESET; DEACTIVATE DATABASE HADR01; BACKUP DATABASE HADR01 TO "/db2backup" EXCLUDE LOGS WITHOUT PROMPTING; **Finding log file name for LSN (Log Sequence Number) :** db2flsn **Check if archived log is valid :** db2cklog **Log settings :** db2 update db cfg for using logfilsiz XXXXX logprimary XXX logsecond XXX **Transactional log archiving history :** db2 "WITH gen_ts (ts) AS ( VALUES current timestamp - 2 days UNION ALL SELECT ts + 1 hour FROM gen_ts WHERE ts <= current timestamp ), format_ts (yyyymmddhh) AS ( SELECT bigint(ts)/10000 FROM gen_ts ), log_archives (yyyymmddhh, archive_count) AS ( SELECT substr(start_time, 1, 10) as YYYYMMDDhh, count(*) FROM sysibmadm.db_history WHERE operation = 'X' GROUP BY substr(start_time, 1, 10) ) SELECT translate('ABCD-EF-GH IJh', cast(f.yyyymmddhh as char(12)), 'ABCDEFGHIJ') as hour ,coalesce(a.archive_count,0) AS logs_archived FROM format_ts f LEFT OUTER JOIN log_archives a ON f.yyyymmddhh = a.yyyymmddhh"