Utilizando o pacote DBMS_APPLICATION_INFO para inserir informações na V$SESSION

Um recurso pouco utilizado, porém muito útil no Oracle Database é setar informações da aplicação nas views de sistema V$SESSION / GV$SESSION. É comum alguma consulta estar impactando o ambiente e as informações contidas nas views de sistema e as informações não serem tão precisas a ponto de ir direto no problema. É possível, por exemplo, colocar o nome da aplicação ou da etapa do processo em que está sendo executado, e com isso você saberia se o processo que está impactando é o início ou o fim do processo.

Mãos á obra ..

Abra uma query no Oracle e execute a query abaixo. Nesse caso, eu estou informando que minha aplicação é o controle de estoque e que o procedimento que está sendo executado é a baixa de produtos devolvidos:

[code lang=”sql”]

exec dbms_application_info.set_module(module_name => ‘Controle de Estoque’,action_name => ‘Baixa dos produtos devolvidos’);

PL/SQL procedure successfully completed.

[/code]

Após execução do pacote acima, a query na v$session será populada com os dados:

[code lang=”sql”]

select osuser, module, action from v$session where action is not null

noraldino <strong>Controle de Estoque Baixa dos produtos devolvidos</strong>

[/code]

As informações contidas no pacote podem ser customizadas de acordo com sua necessidade. É recomendado que esse procedimento seja repassado ao time de desenvolvimento para que seja incluído esse pacote antes das execuções de procedimentos, pois na hora do troubleshooting essas informações podem ser muito úteis e poupar muito tempo dos envolvidos.

Enjoy !

Solucionando o erro ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

Esse erro comum ocorre quando você tenta executar uma operação em uma tabela que foi alterada e a transação ainda está pendente. No nosso caso, estávamos tentando truncar uma tabela de B.I. e o erro era retornado instantaneamente: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired !

O select abaixo ajudou a identificar a causa raiz, ele lista quais sessões estão aguardando commit ou roolback. No meu caso foi uma transação aberta há mais de 30 dias e, alinhando com a área, matamos a sessão:

[code lang=”sql”]
SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S,
V$PROCESS P, V$SQL SQ
WHERE L.OBJECT_ID = O.OBJECT_ID
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR
AND S.SQL_ADDRESS = SQ.ADDRESS;
[/code]

Dica: Em ambiente Oracle RAC troque o V$ por GV$ !

Faça bom uso do script.

Corrigindo o erro RMAN-20001: target database not found in recovery catalog

Criei um banco do zero, movi os dados da instância anterior para o mesmo e fui conectar no RMAN/CATALOGO para ver se estava tudo ok. No exato momento recebi o segunte erro:
[code lang=”sql”]
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of crosscheck command at 07/18/2018 15:15:45
RMAN-12010: automatic channel allocation initialization failed
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20001: target database not found in recovery catalog
[/code]

Esse erro acontece porque o banco de dados criado não foi registrado no catálogo. Um comando extremamente simples resolve o problema, basta registrar o database no catálogo : )

Com o usuário Oracle e as variáveis do banco setadas, execute o seguinte comando para conectar no banco de dados:
[code lang=”sql”]
rman target / catalog rman/mypassword@repositorio;
[/code]
A seguinte mensagem de sucesso será apresentada na tela:
[code lang=”sql”]
Recovery Manager: Release 12.1.0.1.0 – Production on Wed Jul 18 15:15:39 2018

Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

connected to target database: GALOMINEIRO (DBID=131313131313)
connected to recovery catalog database
[/code]

Após conectar, basta digitar o comando register database para que o banco de dados seja registrado no catálogo:
[code lang=”sql”]
RMAN> register database;
[/code]
E acompanhe a execução do procedimento:
[code lang=”sql”]
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
[/code]

Pronto! A partir desse momento o banco de dados estará devidamente registrado no catálogo. Basta conectar no catálogo e rodar o select abaixo para garantir que o banco está de fato no catalogo:

[code lang=”sql”]
select * from rc_database where name = ‘GALOMINEIRO’
65432165 50023546 131313131313 GALOMINEIRO 654984613565 18/07/18
[/code]

Evento – Oracle para todos em 13/07/2018

Bom dia a todos,
nosso evento do mês de julho será na Escola Estadual José Ermírio de Morais e os dados estão logo abaixo:

Tema: Oracle Autonomous Database- O que há de novo?
Local: Escola Estadual José Ermírio de Morais
Data: 13/07/2018
Horário: 20:00 – Sala: 03
Palestrante: Leonardo Pedroso Costa

Espero vocês lá!

Carregar mais