none
Selecionar dados retroativos no SQL RRS feed

  • Pergunta

  • Bom dia,

    Estou utilizando o SQL Server 2008, e gostaria de saber se alguém poderia me tirar uma dúvida:

    É possível selecionar dados do banco em datas anteriores?

    Exemplificando, eu tenho uma tabela "funcionario" que contém um campo "endereco". O campo "endereço" continha uma informação no dia 12/02/2009, porém a informação foi atualizada através de um comando update no dia 15/02/2009.

    Eu consigo selecionar o valor que havia no campo em 12/02/2009?

    Abs.
    sexta-feira, 27 de fevereiro de 2009 12:34

Respostas

  • Olá Fábio,

    O ORACLE possui essa funcionalidade e senão me engano chama-se ORACLE Flash Back. O Oracle manterá as transações em um segmento de UNDO e dessa forma será possível que você pesquise a situação do banco em algum passado próximo. Normalmente essa funcionalidade é configurada para 15 minutos, ou seja, se você fizer algo "errado", poderá consultar a situação do banco a 15 minutos atrás. É possível configurar para mais tempo, mas creio que três dias signifiquem um OVERHEAD bem considerável.

    A partir do SQL Server 2005 existe um recurso para tentar competir com o ORACLE Flash Back. Esse recurso é conhecido como Database Snapshot. No seu caso você tiraria uma "foto" (SNAPSHOT) do banco no dia 12 e quando chegasse no dia 15 você poderia consultar a foto do dia 12. Em virtude dos "ponteiros inteligentes" do SNAPSHOT, ele ocupa muito menos espaço e não se trata de um backup. É um recurso muito interessante, mas possui um certo OverHead nas operações de INSERT, DELETE e UPDATE. Recomendo pesquisar o Books OnLine para maiores detalhes.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com/
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta FabioYoung segunda-feira, 2 de março de 2009 15:39
    • Marcado como Resposta FabioYoung segunda-feira, 2 de março de 2009 15:39
    sábado, 28 de fevereiro de 2009 00:55

Todas as Respostas

  • Olá,

    Você só conseguirá restaurar esta linha, se tiver como restaurar um backup que contenha os dados do dia 12.

    De acordo com a tua estratégia de backups, você pode criar um novo database, restaurar o backup que contenha estas informações (seja este um backup full, differential ou de transações), encontrar a linha desejada e movê-la/sobrescrevê-la para o seu database corrente.

    Um abraço,
    Raul Santos Neto

    sexta-feira, 27 de fevereiro de 2009 13:35
  • Fábio,

    Concordo com o Raul, outra possibilidade seria caso este dado do dia 12 esteja armazenado em outra tabela.

    O volume de dados retroativos que você deseja recuperar é muito grande, esta recuperação é algo a ser realizado diáriamente?

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 27 de fevereiro de 2009 15:02
  • Raul e Junior,

    Obrigado pela resposta.

    Na verdade eu costumo recuperar os dados dessa maneira mesmo, restaurando o backup para um banco diferente e selecionando o registro nesse banco de backup.

    Como os bancos são muito grandes, pensei se não existiria uma maneira mais rápida.

    Alguns amigos comentaram que no Oracle é possível selecionar um dado que já foi alterado, sem a necessidade de voltar um backup. Claro que não vi isto na prática funcionando, e pesquisei também se haveria alguma maneira de fazer o mesmo no SQL Server. Não obtive sucesso na pesquisa, então pensei em trocar uma idéia aqui no fórum.

    Abs.

    sexta-feira, 27 de fevereiro de 2009 16:11
  • Olá Fábio,

    O ORACLE possui essa funcionalidade e senão me engano chama-se ORACLE Flash Back. O Oracle manterá as transações em um segmento de UNDO e dessa forma será possível que você pesquise a situação do banco em algum passado próximo. Normalmente essa funcionalidade é configurada para 15 minutos, ou seja, se você fizer algo "errado", poderá consultar a situação do banco a 15 minutos atrás. É possível configurar para mais tempo, mas creio que três dias signifiquem um OVERHEAD bem considerável.

    A partir do SQL Server 2005 existe um recurso para tentar competir com o ORACLE Flash Back. Esse recurso é conhecido como Database Snapshot. No seu caso você tiraria uma "foto" (SNAPSHOT) do banco no dia 12 e quando chegasse no dia 15 você poderia consultar a foto do dia 12. Em virtude dos "ponteiros inteligentes" do SNAPSHOT, ele ocupa muito menos espaço e não se trata de um backup. É um recurso muito interessante, mas possui um certo OverHead nas operações de INSERT, DELETE e UPDATE. Recomendo pesquisar o Books OnLine para maiores detalhes.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com/
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta FabioYoung segunda-feira, 2 de março de 2009 15:39
    • Marcado como Resposta FabioYoung segunda-feira, 2 de março de 2009 15:39
    sábado, 28 de fevereiro de 2009 00:55
  • Olá Gustavo,

    Muito obrigado pelas informações, era justamente o que eu procurava.
    Valeu a dica!

    Abraços.
    segunda-feira, 2 de março de 2009 15:38