Soluções para problemas gerais
quarta-feira, 18 de setembro de 2013
Fazendo Pivoteamento no Oracle 11g
Inúmeras vezes precisei fazer o pivoteamento ou transposição de dados e sempre usei aquela velha estratégia de MAX com DECODE e GROUP BY. Porem isso deixava uma limitação na quantidade de campos que que precisava pivotear. Com a função PIVOT do Oracle 11g isso simplificou muito.
Vamos supor que tenhamos a query abaixo, onde o nome da tabela pode ser variável
SELECT column_name
FROM SYS.all_tab_columns
WHERE OWNER = 'SCOTT'
AND TABLE_NAME = 'EMP';
Para transformar as linhas com o nome das colunas em uma lista separada por virgula, fiz isso:
SELECT replace(
replace(
replace (column_name_xml,'<PivotSet><item><column name = "COLUMN_NAME">'),
'</column><column name = "ERR">1</column></item><item><column name = "COLUMN_NAME">',','),
'</column><column name = "ERR">1</column></item></PivotSet>') as LISTA_COLUNAS
FROM (SELECT column_name
FROM SYS.all_tab_columns
WHERE OWNER = 'SCOTT'
AND table_name = 'EMP')
PIVOT XML (count(1) AS err FOR (column_name) IN (SELECT column_name
FROM SYS.all_tab_columns
WHERE OWNER = 'SCOTT'
AND table_name = 'EMP'));
Precisei usar PIVOT XML pois a função PIVOT não aceita uma subquery, apenas uma listagem.
segunda-feira, 11 de julho de 2011
Oracle - Query que mostra o tamanhos das Tablespaces
Query que mostra a lista de tablespace, espaço utilizado, espaço livre, espaço total e percentual livre:
SELECT
DF.TABLESPACE_NAME "TABLESPACE",
(DF.TOTALSPACE - FS.FREESPACE) "USED MB",
FS.FREESPACE "FREE MB",
DF.TOTALSPACE "TOTAL MB",
ROUND(100 * (FS.FREESPACE / DF.TOTALSPACE)) "PCT. FREE"
FROM
(SELECT
TABLESPACE_NAME,
ROUND(SUM(BYTES) / 1048576) TOTALSPACE
FROM DBA_DATA_FILES
GROUP BY
TABLESPACE_NAME
) DF,
(SELECT
TABLESPACE_NAME,
ROUND(SUM(BYTES) / 1048576) FREESPACE
FROM DBA_FREE_SPACE
GROUP BY
TABLESPACE_NAME
) FS
WHERE
DF.TABLESPACE_NAME = FS.TABLESPACE_NAME(+)
--AND DF.TABLESPACE_NAME = 'RUN_DATA'
--AND FS.TABLESPACE_NAME = 'RUN_DATA'
;
Query cedida pelo amigo Cesar Toschi.
SELECT
DF.TABLESPACE_NAME "TABLESPACE",
(DF.TOTALSPACE - FS.FREESPACE) "USED MB",
FS.FREESPACE "FREE MB",
DF.TOTALSPACE "TOTAL MB",
ROUND(100 * (FS.FREESPACE / DF.TOTALSPACE)) "PCT. FREE"
FROM
(SELECT
TABLESPACE_NAME,
ROUND(SUM(BYTES) / 1048576) TOTALSPACE
FROM DBA_DATA_FILES
GROUP BY
TABLESPACE_NAME
) DF,
(SELECT
TABLESPACE_NAME,
ROUND(SUM(BYTES) / 1048576) FREESPACE
FROM DBA_FREE_SPACE
GROUP BY
TABLESPACE_NAME
) FS
WHERE
DF.TABLESPACE_NAME = FS.TABLESPACE_NAME(+)
--AND DF.TABLESPACE_NAME = 'RUN_DATA'
--AND FS.TABLESPACE_NAME = 'RUN_DATA'
;
Query cedida pelo amigo Cesar Toschi.
Oracle - Query que mostra quais são as maiores tabelas
Query que seleciona a lista das maiores tabelas. Pode-se filtrar por owner.
SELECT * FROM DBA_TABLES
WHERE TABLESPACE_NAME = 'RUN_DATA'
AND BLOCKS IS NOT NULL
ORDER BY BLOCKS DESC;
SELECT * FROM DBA_TABLES
WHERE TABLESPACE_NAME = 'RUN_DATA'
AND BLOCKS IS NOT NULL
ORDER BY BLOCKS DESC;
Oracle - Matar uma sessão
Para matar uma sessão no Oracle:
1) Select que mostra as sessoes do user NOME
select * from V$SESSION
where username = 'NOME';
2) Selecionar os campos SID e SERIAL# da sessão que deseja matar
SID = 208
SERIAL# = 26195
3) Executar o comando abaixo:
Alter system kill session '208,26195';
1) Select que mostra as sessoes do user NOME
select * from V$SESSION
where username = 'NOME';
2) Selecionar os campos SID e SERIAL# da sessão que deseja matar
SID = 208
SERIAL# = 26195
3) Executar o comando abaixo:
Alter system kill session '208,26195';
domingo, 8 de maio de 2011
SQLDeveloper - Keep Alive
SQLDeveloper - Keep Alive
Eu estava com problemas de conexão com a base do cliente. Quando eu ficava mais de 15 minutos sem executar uma query o firewall "matava" a conexao. Então descobri um plugin no Oracle SQLDeveloper que a cada "X" minutos faz um "ping" no banco de destino.
(1) Para isso basta baixar o arquivo do link abaixo:
https://sites.google.com/site/keepaliveext/oracle.sqldeveloper.keepalive.jar?attredirects=0
(2) Coloque o arquivo oracle.sqldeveloper.keepalive.jar na pasta ..\sqldeveloper-x.x.x.x.x\sqldeveloper\sqldeveloper\extensions
(3) Clique sobre a conexão salva no SQLDeveloper e configure o plugin, informando o tempo em minutos
(4) Após configurar clique em "Activate" e depois conecte no Banco de Dados
Eu estava com problemas de conexão com a base do cliente. Quando eu ficava mais de 15 minutos sem executar uma query o firewall "matava" a conexao. Então descobri um plugin no Oracle SQLDeveloper que a cada "X" minutos faz um "ping" no banco de destino.
(1) Para isso basta baixar o arquivo do link abaixo:
https://sites.google.com/site/keepaliveext/oracle.sqldeveloper.keepalive.jar?attredirects=0
(2) Coloque o arquivo oracle.sqldeveloper.keepalive.jar na pasta ..\sqldeveloper-x.x.x.x.x\sqldeveloper\sqldeveloper\extensions
(3) Clique sobre a conexão salva no SQLDeveloper e configure o plugin, informando o tempo em minutos
(4) Após configurar clique em "Activate" e depois conecte no Banco de Dados
domingo, 10 de abril de 2011
Dica - Open Proj
Precisei planejar alguns projetos e não queria utilizar o M$ Project. Então busquei uma solução Open Source e encontrei o Serena OpenProj [http://openproj.org/openproj]. Já usei em dois projetos e até agora está correspondendo as expectativas. Muito bom mesmo.
Recomendo!!
Recomendo!!
terça-feira, 21 de dezembro de 2010
Para alterar o idioma do ODI versão 10
Editar o arquivo odi_params.bat que está em %ODI_JAVA_HOME%/bin e localizar a linha com ODI_ADDITIONAL_JAVA_OPTIONS. Então fazer o SET do idioma desejado como o exemplo abaixo:
Inglês:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=en" "-Duser.country=US"
Português Brasil:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=pt" "-Duser.country=BR"
Francês:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=fr" "-Duser.country=CA"
Inglês:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=en" "-Duser.country=US"
Português Brasil:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=pt" "-Duser.country=BR"
Francês:
set ODI_ADDITIONAL_JAVA_OPTIONS="-Duser.language=fr" "-Duser.country=CA"
Assinar:
Postagens (Atom)