Galera,

Dando continuidade a nossa série DBA de Guerrilha, hoje falaremos sobre a ferramenta db2diag, utilizada para navegar pelo seu arquivo de diagnóstico do DB2 LUW.

Você sabe qual a utilização da ferramenta db2diag?
A ferramenta db2diag é direcionada aos DBAs, Administradores do Sistema e também ao suporte IBM, facilitando assim a leitura e filtro do arquivo db2diag.log.

E o db2diag.log?
A principal função do db2diag.log é auxiliar na resolução de problemas, ou seja, todos os erros do sistema DB2 ou qualquer ação que leve a causar um erro é então registrada neste arquivo.
Para configurarmos o db2diag.log temos que apenas trabalhar com 3 parâmentros a nível de instância, são eles:

–> diagsize: esse parametro determina o tamanho do arquivo db2diag.log. Com um valor 0 (zero – default) nenhum tamanho é estipulado e ele irá crescer livre, leve e solto. Qualquer valor acima de zero, tornará o arquivo db2diag.log rotativo/circular (10 arquivos do db2diag.log – padrão e não tem alteração) e com tamanhos definidos. Por exemplo, se eu disser que quero atualizar este parâmetro com o valor de 100, então cada arquivo db2diag.log terá no máximo 90MB, pois 10MB é reservado para um outro arquivo chamado instance notification log (nomedainstance.nfy) que irá guardar mensagens de manutenção e administração do banco de dados e instância. As mesmas informações que o instance notification log possui o db2diag.log também, a diferença é que o arquivo db2diag.log pode armazenar maiores informações e com maior nível de detalhamento.
Para atualizar este paramêtro utilize o comando: db2 “update dbm cfg using diagsize 100”

–> diagpath: onde os arquivos ou arquivo db2diag.log será criado e armazenado.
Para atualizar este parâmetro utilize o comando: db2 “update dbm cfg using diagpath E:DB2DIAG”

–> diaglevel: pode receber valores de 0 a 4. Quanto maior o valor configurado mais informações serão gravadas no arquivo db2diag.log. O nível 4 é apenas recomendado em casos de problemas graves ou tuning de ambiente.
Para atualizar este parâmetro utilize o comando: db2 “update dbm cfg using diaglevel 2 immediate”

Mas como utilizamos a ferramenta db2diag?

A resposta é simples,  digitando db2diag. Fazendo isso, a ferramenta db2diag procurará o arquivo db2diag.log e o abrirá completamente. “Ah mas para isso eu utilizo o Vi ou qualquer editor de texto, também concordo!!!” Então vamos utilizá-lo inteligentemente…kkkkkk
Segue um exemplo:

db2diag -time 2012-08-23 -node "0" -level "Severe, Error" |
db2diag -fmt "Time: %{ts} Partition: %node Message Level: %{level}
n Pid: %{pid} Tid: %{tid} Instance: %{instance}nMessage: @{msg}n"

Nossa mas o que esse comando faz? Pois bem, primeiramente eu quero extrair do db2diag.log todos os registros na data especificada, que possuam nível de mensagem Severe/Error e também a partição onde essa mensagem foi gerada. Na segunda parte do comando (após o pipe) quero trazer o pid do processo no sistema operacional, a thread do sistema (tid) e a instância que o erro pertence e caso exista alguma mensagem detalhando o problema ele também trará.
O pipe (|) serve para concatenar os comandos, enquanto o (n) serve para pular a linha.

Veja como ficará o seu output.

Prático não acha? Perceba que o horário é o seu divisor de mensagens.
Teste o comando e veja as facilidades de utilizá-lo. Afinal a prática leva a perfeição. 🙂

DICA: Você também pode ler o db2diag.log através da view administrativa PDLOGMSGS_LAST24HOURS ou da table function PD_GET_LOG_MSGS.

Faça um teste utilizando estes dois SQLs abaixo. Eles irão acessar o seu db2diag.log.

db2 "SELECT * FROM SYSIBMADM.PDLOGMSGS_LAST24HOURS WHERE MSGSEVERITY = 'C' ORDER BY TIMESTAMP DESC"
db2 "SELECT * FROM TABLE(PD_GET_LOG_MSGS(CURRENT_TIMESTAMP – 7 DAYS)) AS T WHERE INSTANCENAME = 'DB2' AND DBNAME = 'SAMPLE' ORDER BY
 TIMESTAMP ASC"

Leia mais sobre a ferramenta db2diag no DB2 INFOCENTER.

Lembrando a todos que qualquer duvida estamos à disposição para auxiliá-los.