none
Retornar linha excluída no SQL SERVER 2005 RRS feed

  • Pergunta

  • Bom dia Pessoal...

    Estou com um problema enorme, tenho uma tabela chamada Estabelecimentos e dentro dela fiz a exclusão de uma linha.... Como retornar essa linha excluída?

    Att,

    Herbert Jone

    quinta-feira, 3 de março de 2016 14:01

Respostas

  • Se o registro existir no backup full que você tem, você restaura o banco em outro lugar ou na mesma instancia com outro nome e depois fazer o insert dos dados, o registro deletado não tem como voltar se não pelo backup.

    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    quinta-feira, 3 de março de 2016 19:26
  • Ajuda,

    Uma possibilidade como você tem o backup do seu banco de dados é utilizar o Select abaixo, para identificar as linhas que foram excluídas:

    SELECT 
     [Current LSN],    
     [Transaction ID],
         Operation,
         Context,
         AllocUnitName
        
    FROM 
        fn_dblog(NULL, NULL) 
    WHERE 
        Operation = 'LOP_DELETE_ROWS'

    Após identificar, este outro select vai permitir buscar exatamente a linha desejada:

    SELECT
     [Current LSN],    
     Operation,
         [Transaction ID],
         [Begin Time],
         [Transaction Name],
         [Transaction SID]
    FROM
        fn_dblog(NULL, NULL)
    WHERE
        [Transaction ID] = '0000:0000055e' -- aqui você vai informar o id da transação que representa a linha deseja
    AND
        [Operation] = 'LOP_BEGIN_XACT'

    Agora você vai poder fazer a restauração do seu banco de dados com base no número do Log Sequence Number - LSN, veja os exemplos abaixo:

    --Restoring Full backup with norecovery.
    RESTORE DATABASE ReadingDBLog_COPY
        FROM DISK = 'C:\ReadingDBLog_FULL_15JAN2014.bak'
    WITH
        MOVE 'ReadingDBlog' TO 'C:\ReadingDBLog.mdf',
        MOVE 'ReadingDBlog_log' TO 'C:\ReadingDBLog_log.ldf',
        REPLACE, NORECOVERY;
        
        GO
    
    --Restore Log backup with STOPBEFOREMARK option to recover exact LSN.
    
       RESTORE LOG ReadingDBLog_COPY
    FROM
        DISK = N'C:\ReadingDBlog_tlogbackup_15thJan610.trn'
    WITH
        STOPBEFOREMARK = 'lsn:22000000042100001'


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 4 de março de 2016 00:14
    Moderador

Todas as Respostas

  • Bom dia,

    Cara você só consegue voltar com a linha se vc tiver um backup full e aplicar os logs até o momento que você fez a exclusão dos dados.



    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    quinta-feira, 3 de março de 2016 14:33
  • Tiago boa tarde...

    tenho o backup full...acontece que essa exclusão foi feita a um ano atras e só agora o usuário me reportou o problema. Como faria para retornar essa linha?

    Att,

    Herbert

    quinta-feira, 3 de março de 2016 19:19
  • Se o registro existir no backup full que você tem, você restaura o banco em outro lugar ou na mesma instancia com outro nome e depois fazer o insert dos dados, o registro deletado não tem como voltar se não pelo backup.

    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    quinta-feira, 3 de março de 2016 19:26
  • Poderia me dá uma ajuda no insert? me orientar...pois sou leigo e ainda tenho dificuldades...

    Pq há outras tabelas ligadas no caso ao estabelecimento...e fazendo o insert eu traria todas essas informações?

    Att,

    Herbert

    quinta-feira, 3 de março de 2016 20:05
  • Ajuda,

    Uma possibilidade como você tem o backup do seu banco de dados é utilizar o Select abaixo, para identificar as linhas que foram excluídas:

    SELECT 
     [Current LSN],    
     [Transaction ID],
         Operation,
         Context,
         AllocUnitName
        
    FROM 
        fn_dblog(NULL, NULL) 
    WHERE 
        Operation = 'LOP_DELETE_ROWS'

    Após identificar, este outro select vai permitir buscar exatamente a linha desejada:

    SELECT
     [Current LSN],    
     Operation,
         [Transaction ID],
         [Begin Time],
         [Transaction Name],
         [Transaction SID]
    FROM
        fn_dblog(NULL, NULL)
    WHERE
        [Transaction ID] = '0000:0000055e' -- aqui você vai informar o id da transação que representa a linha deseja
    AND
        [Operation] = 'LOP_BEGIN_XACT'

    Agora você vai poder fazer a restauração do seu banco de dados com base no número do Log Sequence Number - LSN, veja os exemplos abaixo:

    --Restoring Full backup with norecovery.
    RESTORE DATABASE ReadingDBLog_COPY
        FROM DISK = 'C:\ReadingDBLog_FULL_15JAN2014.bak'
    WITH
        MOVE 'ReadingDBlog' TO 'C:\ReadingDBLog.mdf',
        MOVE 'ReadingDBlog_log' TO 'C:\ReadingDBLog_log.ldf',
        REPLACE, NORECOVERY;
        
        GO
    
    --Restore Log backup with STOPBEFOREMARK option to recover exact LSN.
    
       RESTORE LOG ReadingDBLog_COPY
    FROM
        DISK = N'C:\ReadingDBlog_tlogbackup_15thJan610.trn'
    WITH
        STOPBEFOREMARK = 'lsn:22000000042100001'


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 4 de março de 2016 00:14
    Moderador
  • Muito obrigado...Tiago e pedro...me ajudaram bastante...
    sexta-feira, 4 de março de 2016 12:05