====== 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"