AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 54067
Accepted
BVernon
BVernon
Asked: 2013-11-28 11:17:48 +0800 CST2013-11-28 11:17:48 +0800 CST 2013-11-28 11:17:48 +0800 CST

Restaurando para um ponto específico no tempo no SQL Server

  • 772

EDIT: O problema acabou sendo que, embora os backups sejam feitos todas as noites, eu estava tentando restaurar para um ponto no tempo que ainda não havia sido feito backup. Eu teria percebido isso antes se estivesse fazendo o script da restauração, mas como estava usando a GUI, ela simplesmente escolheu o arquivo de log mais recente e não se preocupou em me notificar de que o arquivo de log escolhido não continha realmente o ponto no tempo Eu estava especificando.

Depois que fiz um backup atual do banco de dados e do log de transações, funcionou perfeitamente.

Dito isso, ainda não entendo como o registro com tempo de '2013-11-27 12:52:08.240' foi restaurado no cenário descrito abaixo. Mas, por enquanto, vou atribuir isso a algo maluco com o aplicativo registrando um horário incorreto.


Mais uma vez, estou confuso com a (in?) capacidade do SQL Server de restaurar para um ponto específico no tempo.

Às vezes, quando tentei isso no passado, parecia que o SQL Server foi restaurado para um ponto no tempo próximo de onde eu pedi, mas não exatamente onde eu especifiquei. Eu considerei isso um mal-entendido da minha parte, pois sei que as datas registradas no banco de dados se originam no aplicativo e, portanto, podem variar um pouco desde o momento em que os registros são realmente gravados. As variações eram, na verdade, um pouco mais do que "ligeiras", mas essa ainda é a melhor explicação que pude apresentar.

Por volta das 12h55 de hoje, restaurei um banco de dados 30 minutos antes das 12h25. Agora, quando faço uma consulta no log e classifico por data/hora, vejo um registro com a data '2013-11-26 18:21:49.200' seguido imediatamente por um registro com a data '2013-11-27 12:52:08.240' um ao lado do outro.

Portanto, minha primeira observação é que todos os registros desde o início de hoje até o momento em que restaurei (12h25) não estão lá. Minha segunda observação é que há um único registro às 12h52, que é 27 minutos DEPOIS do horário em que tentei restaurar (muito, muito grande para uma pequena variação no tempo entre quando o aplicativo escolheu um horário e quando o registro realmente ficou escrito).

Alguém mais caiu nessa? Não tenho ideia de por que isso estaria acontecendo e gostaria de receber qualquer ajuda para descobrir como fazer backup de meus bancos de dados de forma que eles sejam restaurados adequadamente para um ponto no tempo em que eu precisar, pois esse é o motivo pelo qual mudei para usar o modelo Full Recovery para backups.

sql-server-2008 restore
  • 1 1 respostas
  • 1137 Views

1 respostas

  • Voted
  1. Best Answer
    Mike Walsh
    2013-11-28T16:31:37+08:002013-11-28T16:31:37+08:00

    A resposta rápida aqui é: o que você está descrevendo/insinuando é um grande problema, e eu não experimentei isso e esse não é o comportamento padrão ou esperado do SQL Server.

    A capacidade de restaurar é uma função fundamental de um RDBMS. A capacidade de restaurar a um ponto no tempo é uma parte fundamental dessa função fundamental. E a base dessa habilidade é o mecanismo de log de um Sistema de Gerenciamento de Banco de Dados Relacional.

    Isso não é apenas o que nos dá a capacidade de restaurar para um ponto no tempo, mas a capacidade de recuperar para um estado consistente durante uma falha ou reinicialização. É o mesmo log de transações usado lá.

    Resumindo (existem muitos recursos que descrevem o processo. Este é um bom começo ) - o SQL Server usa um mecanismo de log de gravação antecipada. Isso significa que tudo é gravado em seu log de transações e confirmado para ser gravado lá antes que a transação seja considerada durável e sua transação possa ser considerada concluída. Se isso não funcionasse, nunca poderíamos confiar na confiabilidade do SQL Server e dos dados em seu aplicativo, porque os dados poderiam se tornar inconsistentes com problemas de E/S, problemas de memória, reinicialização etc. Não teríamos garantia de manter o ACID propriedades do banco de dados mais.

    Portanto, com essa ressalva em mente, há uma das três coisas acontecendo aqui:

    1. Um erro/falha durante a restauração - acho que não é o caso aqui. Por quê? Porque você conseguiu restaurar e consultar o banco de dados após a restauração e não está lidando com um banco de dados corrompido ou falhas de restauração.
    2. Um bug - não estou dizendo que isso não é possível, mas sou cético quanto a isso. Especialmente com a atualização do seu comentário indicando alguma incerteza sobre o que deve estar no log do aplicativo que você está visualizando.
    3. Um Mal-entendido - Este é o palpite mais provável do que você está experimentando. Você pode confirmar isso um pouco fazendo o mesmo processo em um servidor de desenvolvimento ou servidor de teste. O banco de dados errado pode estar sendo restaurado, a tabela que você está consultando não está mostrando os dados que você espera ver e não está registrando os dados corretamente ou não havia as transações que você esperava ver.
      1. Na verdade, você não está fazendo backups / restaurações de log de transações - suponho que também possa haver alguma confusão no que você está fazendo. Para ser claro - para restaurar para um ponto no tempo, você deve restaurar um backup completo com NORECOVERY e, em seguida, aplicar os logs de transação necessários entre seu último backup completo e o horário em que deseja restaurar, especificando WITH STOPAT no log de transação final restaurar e especificar WITH RECOVERY no último. ponto no tempo. (Este artigo fala sobre como restaurar backups de log de transações. Este fala sobre como fazer backup da parte final do log. )

    (**observação:**Também gostaria de confirmar as configurações de fuso horário, o fuso horário no servidor onde os backups foram feitos é o fuso horário usado em sua restauração quando esta pergunta surgiu. Portanto, se você estiver restaurando de um servidor para o outro - verifique seus fusos horários e tudo.)

    Uma maneira simples de provar isso?

    Consulte um pouco a tabela que você está procurando para registrar após a atividade normal. Você vê o que espera ver com base em sua compreensão da atividade de hoje? Ok, bom, siga seu processo de restauração normal ou o indicado na documentação vinculada acima, se você tiver feito algo diferente. Faça esta restauração em outra máquina/máquina de desenvolvimento para não afetar seu servidor principal! Restaure para o momento em que você executou sua consulta nesta tabela. Observe sua tabela - se você executou as etapas acima corretamente, verá que os dados parecem corretos. Caso contrário, primeiro examinaria seu processo, releria as instruções, confirmaria o banco de dados, confirmaria os fusos horários e horários nos dois servidores e, se algo ainda estiver errado e você Descartou totalmente a possibilidade de algo faltando no processo? Eu abriria uma chamada imediatamente com a Microsoft, mas honestamente ficaria surpreso se você estivesse enfrentando um bug ou problema.

    • 3

relate perguntas

  • Melhores práticas para conectar bancos de dados que estão em diferentes regiões geográficas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve