Archive

Archive for the ‘DB2 / Banco de dados’ Category

Estrutura de diretórios no DB2 e seus Logs

Featured imageMuitas pessoas tem dúvidas referentes a estrutura de diretórios do DB2 e onde se localizam seus Logs.

No link a seguir encontramos a referência completa: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.qb.server.doc/doc/r0024443.html

Todavia, para sabermos onde o DB2 está gerando logs, basta nos conectarmos no banco pelo DB2 command line:

db2 connect to XXXXX

E dar o comando:

db2 get dbm cfg

Procurar pela variável DIAGPATH.

Outra forma simples, e no caso, se o banco não estiver subindo (você pode estar com algum problema e ter que analisar os logs justamente por isso), pode-se efetuar uma busca no HD pelo arquivo DB2DIALG*.log . NORMALMENTE os logs encontram-se no diretório da Instancia, e não no diretório da instalação do DB2, por exemplo (no meu caso):

O DB2 está instalado em /opt/IBM/db2

Os logs encontram-se em /home/db2inst1/sqllib/db2dump/

Enjoy!

Catalogando base de dados DB2 e efetuando REORG

É necessário ter o DB2 instalado no computador (pelo menos o cliente).

Na linha de comando do db2 (db2cc):

  • Vendo o que vc tem catalogado:

db2 list database directory

1-      Catalogar o servidor

db2 catalog tcpip node <NODENAME> remote <REMOTE> server <PORT>

Exemplo: db2 catalog tcpip node prod_ecom remote servername.domain.com server 50001

2-      Catalogar a database

db2 catalog database <database_name> at node <node_name>Exemplo:db2 catalog database wcs_prod at node prod_ecom 

3-      Refresh:

db2 terminate 4- Conectar:db2 connect to tesou user db2prd using db2prd00

Apos conectar:

db2 reorg table db2prd.XXXXXXXXXXXX

Criando um Event Monitor no DB2

Muitas vezes precisamos logar os eventos que acontecem em nosso banco de dados DB2, normalmente, para monitorar desempenho, queries mais utilizadas, etc.

Criar um Event Monitor é uma das soluções mais simples e rapidas para monitoração. O procedimento abaixo mostra como criar um simples, que vai logar os eventos de seu banco:

– conecte no seu banco: db2 connect to banco user fulano using senha

– Criar o monitor de eventos
db2 “CREATE EVENT MONITOR monjmm FOR STATEMENTS WRITE TO FILE ‘c:\tmp'” — verificar se o destino c:\tmp existe e é possivel escrever no mesmo
 
– liga o monitor de eventos
db2 SET EVENT MONITOR monjmm STATE = 1
 
– Use o banco!
 
– Desligue o monitor de eventos
db2 SET EVENT MONITOR monjmm STATE = 0
 
– torne o output legivel
db2evmon -path c:\tmp > c:\tmp\filtered.out — Tem que dar permissao de leitura para os arquivos criados
 
– veja os eventos abrindo o arquivo com o bloco de notas
notepad c:\tmp\filtered.out
 
– deletar o monitor
db2 DROP EVENT MONITOR monjmm

Enjoy!

Descobrindo a versão do DB2 via SQL

Várias vezes precisamos descobrir a versão do DB2, e só estamos conectados na instancia. Com a query abaixo, seu problemas acabaram-se:

SELECT service_level, fixpack_num FROM TABLE (sysproc.env_get_inst_info()) as INSTANCEINFO

Descobrindo colunas/tabelas envolvidas em erros no DB2

Quem nunca teve que fazer um insert em uma tabela e deu algum erro no insert e não sabia de que campo se tratava?
Geralmente ele retornaria algo parecido com isso:

Error: DB2 SQL error: SQLCODE: -530, SQLSTATE: 23503, SQLERRMC: DB2PRD.THIST_OPER_VARVL.SQL140701170852720
SQLState: 23503
ErrorCode: -530

Ele retorna falando do ID da Chave, com a query abaixo, você consegue ver de que tabela/campos se trata:

SELECT * FROM SYSCAT.KEYCOLUSE WHERE CONSTNAME = ‘SQL140701170852720′

Enjoy

Select com IF / CASE no SQL Server

Sempre tenho tal necessidade, segue um exemplo para posterior consulta:

SELECT COLUMN_NAME as Nome, DATA_TYPE as Tipo,
CASE
WHEN Character_Maximum_length is null and DATA_TYPE = ‘int’
THEN 10
WHEN Character_Maximum_length is null and DATA_TYPE = ‘decimal’
THEN 20
ELSE Character_Maximum_length
END as Tamanho,
Is_Nullable as NULLS
FROM [INFORMATION_SCHEMA].[COLUMNS]

Formatando campos no DB2

É comum a necessidade de formatarmos campos em selects. Um exemplo boçal é o CNPJ. É muito menos custoso formatar na sua query do que na sua aplicação (java por exemplo)… Então, segue um exemplo de como formatar um CNPJ.

Supondo que seu campo CNPJ tenha o nome CCNPJEMPR, e o conteúdo do mesmo seja:

086547761002422

E você queira retornar assim:

086.547.761/0024-22

Basta utilizar na sua query:

SELECT
SUBSTR(CAST(RIGHT(CONCAT('000000000',CAST(empresa.CCNPJEMPR AS VARCHAR(15))),15) AS VARCHAR(15)),1,3) || '.' ||
SUBSTR(CAST(RIGHT(CONCAT('000000000',CAST(empresa.CCNPJEMPR AS VARCHAR(15))),15) AS VARCHAR(15)),4,3) || '.' ||
SUBSTR(CAST(RIGHT(CONCAT('000000000',CAST(empresa.CCNPJEMPR AS VARCHAR(15))),15) AS VARCHAR(15)),6,3) || '/' ||
SUBSTR(CAST(RIGHT(CONCAT('000000000',CAST(empresa.CCNPJEMPR AS VARCHAR(15))),15) AS VARCHAR(15)),9,4) || '-' ||
SUBSTR(CAST(RIGHT(CONCAT('000000000',CAST(empresa.CCNPJEMPR AS VARCHAR(15))),15) AS VARCHAR(15)),14,2) AS CNPJ_FORMATADO
FROM
CLIENTES;

A função SUBSTR irá pegar os “pedaços” do campo, repare na primeira linha, que especifico 1,3, isso quer dizer, que ela deve pegar 3 caracteres a partir da primeira posição do campo, no exemplo 086.
Onde especifico 9,4, quero dizer que devo pegar 4 caracteres a partir da posição 9, no exemplo: 0024

Por fim, utilizo CAST, RIGHT e CONCATS para formatar o campo, e em casos que tenha 0 (ZEROS) a esquerda, que os mesmos sejam considerados.

Enjoy!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 304 outros seguidores