- Este tópico contém 18 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 5 meses atrás por rodrigobonela.
-
AutorPosts
-
7 de abril de 2009 às 6:02 pm #86112rodrigobonelaParticipante
Bom dia pessoal…
To com uma trigger no banco que não to conseguindo dropar, alterar e nem desabilitar…
Alguém sabe me dizer o que faço?!?!
E pra melhorar, o banco ta muito lento…
Abç7 de abril de 2009 às 6:05 pm #86113David SiqueiraParticipanteOpa!!..e ai carinha, tudo na paz?..Você já deu uma olhadinha no seu ALERT log pra ver se tem alguma mensagem de erro sendo logada, post aqui algum erro para que possamos ter um “Norte” por onde começar a te ajudar.
Abcs.
David
7 de abril de 2009 às 6:08 pm #86115rodrigobonelaParticipanteCara, o lance é que não dá nenhum erro…
Já tentei no sql*plus, pl/sql developer, toad…
Todos ficam muito lentos ao tentar fazer qualquer alteração nesta trigger…
Sinceramente não tenho a menor noção do que aconteceu…
Ontem a mesma trigger estava funcionando corretamente, dai foi feita uma alteração colocando um LOOP, só que o cara que fez a alteração não a finalizou completamente, apenas adicionou o loop e deixou p terminar hj, dai agora não ta dando pra alterar nada…
Ta tenso… rsrsrs…
Abç7 de abril de 2009 às 6:13 pm #86118David SiqueiraParticipanteVocê consegue identificar se ela esta em execução carinha, se ela estiver executando no momento mate a seção e tente desabilita-la, porque provavlemente foi esse LOOP que provocou esse alvoroço todo.
Abcs.
David
7 de abril de 2009 às 6:14 pm #86119David SiqueiraParticipanteVocê consegue identificar se ela esta em execução carinha, se ela estiver executando no momento mate a seção e tente desabilita-la, porque provavlemente foi esse LOOP que provocou esse alvoroço todo.
Abcs.
David
7 de abril de 2009 às 6:17 pm #86120rodrigobonelaParticipanteCara, no momento ela não está sendo executada…
Mas ja tentei modificar de todos os modos… E nada…
Sabe se há algum modo de dropar, desabilitar ou sei la o q?!?! rsrs
Abç7 de abril de 2009 às 6:23 pm #86121David SiqueiraParticipanteCara desabilitar é tranquilo, basta rolar o comando mesmo que tu já sabe :
ALTER TRIGGER "OWNER"."TRIGGER_NAME" DISABLE;
Retorna algum erro quando você tenta desabilitar???
Abcs.
7 de abril de 2009 às 6:29 pm #86122rodrigobonelaParticipanteCara, essa aqui é a bendita da trigger…
Estes dias eu até tava perguntando como que eu a faria…
Comecei a fazer e dai outro desenvolvedor a “terminou” rsrs…
CREATE OR REPLACE TRIGGER trc_audit_owner
AFTER ALTER ON .SCHEMA
DECLARE
w_cod_owner NUMBER;
w_name_owner VARCHAR2(50);
w_name_usuario VARCHAR2(50);
w_cod_objeto NUMBER;
w_nome_objeto VARCHAR2(50);
w_tipo_objeto VARCHAR2(30);
w_nome_coluna VARCHAR2(50);
w_tipo_coluna VARCHAR2(10);
w_tam_coluna NUMBER;
w_data_modif DATE;
w_ocor_ocorrencia VARCHAR2(50);
w_ocor_comando VARCHAR2(20);
w_cod_erro NUMBER;
w_mensagem VARCHAR2(50);BEGIN LOOP
BEGINSELECT DISTINCT u.user#, u.name, s.osuser, o.obj#, o.name, uo.object_type, c.cname, c.coltype, c.width, o.mtime INTO w_cod_owner, w_name_owner, w_name_usuario, w_cod_objeto, w_nome_objeto, w_tipo_objeto, w_nome_coluna, w_tipo_coluna, w_tam_coluna, w_data_modif FROM SYS.obj$ o, SYS.col c, SYS.user$ u, v$session s, user_objects uo WHERE o.mtime = (SELECT MAX(co.mtime) FROM sys.obj$ co WHERE co.owner# = 38) AND c.tname(+) = o.name AND o.owner# = u.user# AND s.USER# = u.user# AND o.obj# = uo.object_id; dbms_output.put_line ('1'); EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN INSERT INTO AUDIT_OWNER VALUES (w_cod_owner, w_name_owner, w_name_usuario, w_cod_objeto, w_nome_objeto, w_tipo_objeto, w_nome_coluna, w_tipo_coluna, w_tam_coluna, w_data_modif); COMMIT; EXCEPTION WHEN OTHERS THEN NULL; END; END LOOP;
EXCEPTION
WHEN OTHERS THEN
NULL;END;
7 de abril de 2009 às 6:38 pm #86123David SiqueiraParticipanteCarinha, eu não tenho como testa-lá aqui, mais segue ai pra você uma série de exemplos e possibilidades de se utilizar Triggers de auditoria, espero que uma delas lhe sirva :
http://www.psoug.org/reference/OLD/ddl_trigger.html?PHPSESSID=8d8d902bcbe2c3d68f5e34b8b53cf507
Abcs.
David
7 de abril de 2009 às 6:41 pm #86124rodrigobonelaParticipanteVlw pela dica ai cara…
Vou ver se alguma me serve…
Mas primeiro preciso acertar este problema aqui, pois ta tenso… rsr…
Brigadão aew.
Abç.7 de abril de 2009 às 6:45 pm #86125rodrigobonelaParticipanteDavid
O erro que dá é este:
ERRO na linha 1:
ORA-04021: tempo esgotado durante espera para bloquear o objeto.
7 de abril de 2009 às 6:51 pm #86126Regis AraujoParticipanteMeu velho.. só uma duvida..
O pq de um Loop dentro de uma trigger…
Este loop esta fazendo a transação ficar infinita até a condição when ser OTHERS.. será que está condição esta sendo verdadeira?!?! Pois ele somente irá parar o loop quando ela for verdadeira… caso o contrario ele vai ficar inserindo.. inserindo e inserindo..Verifica na sua tabela AUDIT_OWNER a quantidade de registros inseridos hoje e compare com outro dia ou se existe muitos registros que aparentemente podem ter sido duplicados…
Usar loop em trigger é muito perigoso.. o desenvolvedor que terminou esta trigger deveria ter realizado um teste em banco de homologação antes de jogar para produção…
E será realmente que a trigger não esta executando no momento em que vc tenta desabilita-la??
Abraços..
7 de abril de 2009 às 6:51 pm #86127IshiiParticipanteOlá,
Essa query demora e custa muito para o Banco…se for para verificar as alterações de objetos acho mais produtivo criar um “antes” e um “depois” das estruturas que você está querendo controlar….
[]s Ishii
7 de abril de 2009 às 6:54 pm #86130Regis AraujoParticipanteRodrigo..
Sua trigger está em execução.. ele somente desabilita a trigger quando ela terminar de realizar a transação que está pendente…
Acho que vc vai ter que parar seu banco para parar esta trigger heim…
Abraços…
7 de abril de 2009 às 7:06 pm #86132rodrigobonelaParticipanteE como que faço isso?
Pois aqui não temos DBA… rsrs… -
AutorPosts
- Você deve fazer login para responder a este tópico.