db2

A idéia desse artigo é mostrar para vocês uma outra maneira interessante de coletar informações sobre sua instância e seus bancos de dados. O DB2 tem uma série de utilitários importantes que te ajudam nessa missão, mas o enfoque é utilizar essa “feature” que foi englobada ao DB2 a partir da versão 9 do produto.

Com essas informações podemos montar ótimos relatórios, além de que se bem aproveitadas temos informações históricas, capacity planing e uma boa “arma” para monitorar o banco de dados.

Como fazemos para listar essas views? Simples! Abaixo vamos mostrar o processo.

1)      Vamos listar nossos bancos de dados primeiro com o comando db2 list db directory.

 

listdbdirectory

2)      Vamos conectar no nosso banco de dados com o comando db2 connect to <database name>.

 

connectto

 

Nesse caso estou utilizando o DB2 9.7 com seu último fix pack. As novas versões do DB2 (10.1 e 10.5) englobam novas views administrativas.

3)      Depois de conectado no banco de dados vamos listar as views com o comando db2 list tables for schema sysibmadm. Neste caso abaixo vou utilizar o comando MORE para listar aos poucos.

 

sysibmadm

 

Uma outra forma de trazer o nome dessas views é fazendo um select na SYSCAT.TABLES com o comando: db2 "select substr(tabname,1,40) as table_name from syscat.tables where tabschema = 'SYSIBMADM'"

sysibmadm2

4)      Depois de lista-las, precisamos ver o conteúdo de cada view. Isso é possível com o comando db2 “describe table sysibmadm.<nome da view/tabela>”

 

describetable

 

Cada view tem uma série de colunas que trazem informações importantes. Quando usamos no nosso dia a dia já sabemos o que buscar e aonde buscar

 

Depois de passar pra vocês um overview básico de como listar e etc, agora vamos dar alguns exemplos do nosso dia a dia utilizando essas views.

 

  • Se precisamos de informações de backup, podemos utilizar a SYSIBMADM.DB_HISTORY. No exemplo abaixo estou listando os backups de 1 mês:

db2 "SELECT TIMESTAMP(START_TIME) AS START_TIME, TIMESTAMP(END_TIME) AS END_TIME,SQLCODE,SQLSTATE,NUM_TBSPS,OPERATION,OPERATIONTYPE,
SUBSTR(LOCATION,1,40) AS LOCATION FROM SYSIBMADM.DB_HISTORY WHERE OPERATION='B' AND START_TIME >= CURRENT TIMESTAMP - 1 MONTH”

 

dbhistory

 

 

  •  Quer saber quais são as 10 tabelas maiores, podemos utilizar a SYSIBMADM.ADMINTABINFO.

db2 "select substr(TABSCHEMA,1,7) AS SCHEMA,substr(TABNAME,1,20) AS TABLE,
(DATA_OBJECT_P_SIZE + INDEX_OBJECT_P_SIZE + LONG_OBJECT_P_SIZE + LOB_OBJECT_P_SIZE + XML_OBJECT_P_SIZE) AS TOTAL_PHYSYCAL_SIZE_KB
,(DATA_OBJECT_L_SIZE + INDEX_OBJECT_L_SIZE + LONG_OBJECT_L_SIZE + LOB_OBJECT_L_SIZE + XML_OBJECT_L_SIZE) AS TOTAL_LOGICAL_SIZE_KB
,TABTYPE,AVAILABLE,REORG_PENDING,INPLACE_REORG_STATUS,INDEXES_REQUIRE_REBUILD
FROM sysibmadm.ADMINTABINFO ORDER BY TOTAL_PHYSYCAL_SIZE_KB DESC FETCH FIRST 10 ROWS ONLY”

admintabinfo

 

  • Quer saber se existe alguma operação de reorg em stop, pause ou completo. Utilize a SYSIBMADM.SNAPTAB_REORG. Com ela conseguimos trazer em qual fase está o reorg também.

 

db2 "SELECT SUBSTR(TABNAME,1,15) AS TABLE_NAME,SUBSTR(TABSCHEMA,1,15) AS TABLE_SCHEMA,REORG_START,REORG_END,REORG_STATUS,
REORG_PHASE,SUBSTR(REORG_TYPE,1,20) AS REORG_TYPE,REORG_INDEX_ID,REORG_TBSPC_ID
FROM SYSIBMADM.SNAPTAB_REORG WHERE REORG_STATUS IN ('STOPPED','PAUSED') ORDER BY REORG_STATUS"

 

snaptabreorg

 

  • Como saber o tamanho dos meu containers e com isso mensurar uma taxa de crescimento. Podemos utilizar a SYSIBMADM.CONTAINER_UTILIZATION.

 

db2 "SELECT DATE(SNAPSHOT_TIMESTAMP) AS DATA,TBSP_ID,SUBSTR(TBSP_NAME,1,15) AS TBSPACE,CONTAINER_ID,CONTAINER_ID,SUBSTR(CONTAINER_NAME,1,80) AS CONTAINER,
FS_USED_SIZE_KB,((FS_USED_SIZE_KB * 100)/FS_TOTAL_SIZE_KB) AS PCT_USED FROM SYSIBMADM.CONTAINER_UTILIZATION"

 

 conteinerutilization

 

  • Para saber a quantidade de logs archives (LOGARCMETH1) gerados em 1 mês, também podemos utilizar a SYSIBMADM.DB_HISTORY.

 

db2 "SELECT DATE(TIMESTAMP(START_TIME)) AS START_DATE,COUNT(*) AS QTD_LOGS, OPERATIONTYPE AS LOG_TYPE
FROM SYSIBMADM.DB_HISTORY
WHERE OPERATION='X'
AND OPERATIONTYPE = ‘1’
AND DATE(TIMESTAMP(START_TIME)) >= CURRENT DATE - 1 MONTH
GROUP BY DATE(TMESTAMP(START_TIME)), OPERATIONTYPE WITH UR"


logarchive

 

Pessoal, as queries acima são exemplos de como podemos utilizar de maneira dinâmica os dados. Essas views guardam os dados desde o último stop/start da instância.

 

Saiba mais em: http://public.dhe.ibm.com/ps/products/db2/info/vr105/pdf/en_US/DB2AdminRoutinesViews-db2are1050.pdf

 

Rafael Balaguer é DBA DB2 LUW Sênior na empresa UOL DIVEO, em São Paulo capital. Certificações: IBM Certified DBA – DB2 10.1 for LUW / IBM Certified Database Associate – DB2 10.1 Fundamentals / IBM Certified Database Associate – DB2 9 Fundamentals / IBM Information Management DB2 Technical Professional v2 / IBM Certified System Administrator – AIX 7IBM Certified Operator – AIX 6.1 Basic OperationsIBM Certified Specialist – System x Technical Fundamentals V11ITIL V3 FoundationMCTS Implementation and Maintenance – SQL Server 2008MCITP Database Administrator – SQL Server 2008