none
Delet em tabela com Trigger RRS feed

  • Pergunta

  •  

    Boa tarde gente...

     

    Tenho uma tabela de saldo que possue a seguinte estrutura em SQL 2000

     

    USID      int           4

    Saldo     float         8

    Data      datetime   8

     

    A tabela possui a seguinte Trigger:

     

    CREATE TRIGGER tg_CheckDEL_SaldoZero ON [dbo].[RANCHO_CartaoSaldo]
    INSTEAD OF DELETE

    AS BEGIN
     
     declare @Logcomp varchar(60) 
     set @Logcomp = (select 'RE:' + CAST(USID as varchar(15)) + ' Saldo:'  + CAST(Saldo as varchar(8)) +  '  DT:'  + CONVERT(varchar(30), Data, 120) from deleted)
     
     INSERT INTO TABLOG_Ranc (LOGDt, LOGUsId, LOGTip, LOGComp, LOGIP)
     VALUES (getdate(),1,251, @Logcomp,'SQLSERVER ALERT')  

    END

     

    Bom..o problema seria o seguinte....segundo minha trigger, não seria possível efetuar nenhum delete e sim um insert em outra tabela de log. Porém, aleatóriamente uma série de registros somem da tabela ao mesmo tempo...sempre são os TOP que somem....alguém tem ideia do que pode ocorrer para que haja o delete dos dados? serial algum problema com o update? em alguma situação o update poderia travar e ocasionar o delete dos registros?

     

    Tem algum código ao qual eu possa acompanhar o que está sendo deletado em tempo real? log? ou outra maneira de acompanhar isto?? e quem está fazendo este delete? Existe alguma maneira de verificar esse delete no Transaction Log?

     

     

    No aguardo,

     

     

    terça-feira, 7 de outubro de 2008 17:06

Respostas

  • Boa Tarde,

     

    Não há como diferenciar a origem do DELETE dentro da trigger (a não ser que você trabalhe com algum sinal, mas isso irá exigir algum nível de recodificação). Se você necessita dessa informação, só mesmo com o Profiler ou uma ferramenta de leitura de log como o Log Explorer ou o Log Rescue.

     

    O problema é que deixar um Profiler eterno é dispendioso e adquirir uma ferramenta de terceiro é mais um custo de licenciamento. Em todo caso, alguns custos valem a pena (principalmente se registros estão desaparecendo).

     

    [ ]s,

     

    Gustavo

    terça-feira, 7 de outubro de 2008 18:43

Todas as Respostas

  • cara da uma olhada

     

    Create Table Exemplo (Campo int)
    Create Table Exemplo_Log (Campo int)

    create trigger NoDelete on Exemplo
    Instead Of Delete
    as
            Insert into Exemplo_Log (campo)
     Select campo from Deleted


    insert into Exemplo (campo) Values (1)
    insert into Exemplo (campo) Values (2)
    insert into Exemplo (campo) Values (3)


    delete from Exemplo where campo  = 2

    Select * From Exemplo

     

    nao deveria estar deletando nao, a menos que alguem use

     

    alter table exemplo disable triggers all -- ou nome da trigger

     

    mais tem um erro na sua trigger tambem, se for feito um delete de mais de uma linha so vai logar 1 linha na sua tabela de log, use sempre um insert  de um select concatenando os dados como se fosse um select para direcionar para sua tabela de log.

     

    Abs;

    terça-feira, 7 de outubro de 2008 17:23
  • Edgar,

     

    Você poderia utilizar a ferramenta SQL Profiler, para fazer o monitoramento on-line do seu servidor SQL Server, mas neste caso você vai verificar o que esta sendo processado, agora se você deseja verificar quais dados estão sendo excluídos, seria outra situação.

    terça-feira, 7 de outubro de 2008 17:28
  • Na verdade eu quero saber quem exclui os dados e em que circunstancias foi excluido....pra chegar em um ponto comum...se foi uma SP...se foi uma Trigger que excluiu.....esse tipo de informação que gostaria de recuperar....

     

    terça-feira, 7 de outubro de 2008 17:38
  • Boa Tarde,

     

    Não há como diferenciar a origem do DELETE dentro da trigger (a não ser que você trabalhe com algum sinal, mas isso irá exigir algum nível de recodificação). Se você necessita dessa informação, só mesmo com o Profiler ou uma ferramenta de leitura de log como o Log Explorer ou o Log Rescue.

     

    O problema é que deixar um Profiler eterno é dispendioso e adquirir uma ferramenta de terceiro é mais um custo de licenciamento. Em todo caso, alguns custos valem a pena (principalmente se registros estão desaparecendo).

     

    [ ]s,

     

    Gustavo

    terça-feira, 7 de outubro de 2008 18:43