Pular para o conteúdo
  • Este tópico contém 18 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 5 meses atrás por Avatar de rodrigobonelarodrigobonela.
Visualizando 15 posts - 1 até 15 (de 19 do total)
  • Autor
    Posts
  • #86112
    Avatar de rodrigobonelarodrigobonela
    Participante

      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ç

      #86113
      Avatar de David SiqueiraDavid Siqueira
      Participante

        Opa!!..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

        #86115
        Avatar de rodrigobonelarodrigobonela
        Participante

          Cara, 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ç

          #86118
          Avatar de David SiqueiraDavid Siqueira
          Participante

            Você 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

            #86119
            Avatar de David SiqueiraDavid Siqueira
            Participante

              Você 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

              #86120
              Avatar de rodrigobonelarodrigobonela
              Participante

                Cara, 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ç

                #86121
                Avatar de David SiqueiraDavid Siqueira
                Participante

                  Cara 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.

                  #86122
                  Avatar de rodrigobonelarodrigobonela
                  Participante

                    Cara, 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
                    BEGIN

                          SELECT 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;

                    #86123
                    Avatar de David SiqueiraDavid Siqueira
                    Participante

                      Carinha, 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

                      #86124
                      Avatar de rodrigobonelarodrigobonela
                      Participante

                        Vlw 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ç.

                        #86125
                        Avatar de rodrigobonelarodrigobonela
                        Participante

                          David

                          O erro que dá é este:

                          ERRO na linha 1:
                          ORA-04021: tempo esgotado durante espera para bloquear o objeto

                          .

                          #86126
                          Avatar photoRegis Araujo
                          Participante

                            Meu 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..

                            #86127
                            Avatar de IshiiIshii
                            Participante

                              Olá,

                              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

                              #86130
                              Avatar photoRegis Araujo
                              Participante

                                Rodrigo..

                                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…

                                #86132
                                Avatar de rodrigobonelarodrigobonela
                                Participante

                                  E como que faço isso?
                                  Pois aqui não temos DBA… rsrs…

                                Visualizando 15 posts - 1 até 15 (de 19 do total)
                                • Você deve fazer login para responder a este tópico.
                                plugins premium WordPress