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 / 299788
Accepted
J.D.
J.D.
Asked: 2021-09-18 09:43:30 +0800 CST2021-09-18 09:43:30 +0800 CST 2021-09-18 09:43:30 +0800 CST

Por que uma restauração de backup completo do meu banco de dados me dá o erro "RESTORE só pode criar um banco de dados ao restaurar um backup completo..."?

  • 772

Configurei um plano de manutenção para fazer um backup completo diário de todos os bancos de dados no meu servidor. Também configurei um segundo plano de manutenção para fazer backups do log de transações a cada 5 minutos. A tarefa de backups do log de transações é interrompida e reiniciada entre 23h e 1h, para permitir que backups em nível de servidor sejam feitos (aconselhamento da equipe de infraestrutura, talvez para serem revisitados). Não acredito que isso deva ser um problema, pois tenho outro servidor seguindo o mesmo padrão e não tenho problemas com seus backups.

Estou tentando verificar se meus backups estão funcionando corretamente, mas sempre que tento restaurar o backup completo com qualquer um dos backups do log de transações que vieram depois dele, recebo imediatamente o seguinte erro:

Erro de restauração de backup

Estou tentando restaurar os backups em um servidor separado (mesma versão do SQL Server) cujo objetivo principal agora é testar a integridade do backup do banco de dados. O banco de dados que estou tentando restaurar atualmente não existe nesse servidor.

Se for de alguma relevância, estas são as opções de restauração que estou usando:

Opções de restauração

Seguindo esta resposta interessante de Aaron Bertrand a uma pergunta semelhante, agora estou investigando algumas coisas com o RESTORE HEADERONLY FROM DISKcomando. Em primeiro lugar, estes são os resultados do meu arquivo de backup completo:

Cabeçalho de backup completo

Apenas um banco de dados/arquivo armazenado nesse backup completo.

Além disso, se eu executar RESTORE HEADERONLY FROM DISKmeu primeiro arquivo de backup do log de transações após o último backup completo, para o próprio arquivo de backup completo e o último arquivo de backup do log de transações antes do último backup completo, observo os seguintes LSNs:

LSNs

Eu pensei que DatabaseBackupLSNtodos os backups deveriam corresponder ao FirstLSNúltimo backup completo anterior a esses backups. É estranho para mim que todos eles pareçam apontar para um backup completo mais antigo.

Quando tento gerar os scripts da restauração que o SSMS está tentando fazer, estranhamente recebo o mesmo erro como uma dica de ferramenta e não me dá os scripts:

Restaurar scripts

Após uma inspeção mais detalhada, quando seleciono todos os meus backups, incluindo o completo, o SSMS remove automaticamente o backup completo e carrega apenas os backups do log de transações para restauração. Eu realmente acho que há uma espécie de cadeia de backup quebrada que está confundindo o SSMS:

Somente backups de log de transações

Se eu selecionar apenas meu backup completo para restaurar, ele me permitirá clicar no botão de script e este é o script apenas para o backup completo:

USE [master]
RESTORE DATABASE [MyDatabase] FROM  DISK = N'P:\MyDatabase\MyDatabase_backup_2021_09_16_223001_3540051.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5

Além disso, meu plano de manutenção não está definido para "backups somente cópia":

Plano de manutenção de backups completos

Para referência, aqui está o script T-SQL para um dos bancos de dados no plano de manutenção de backup completo:

BACKUP DATABASE [master] TO  DISK = N'\\OurDomain\Shares\SQL Backups\Full Backups\master\master_backup_2021_09_19_004931_6111907.bak' WITH  RETAINDAYS = 14, NOFORMAT, NOINIT,  NAME = N'master_backup_2021_09_19_004931_6111907', SKIP, REWIND, NOUNLOAD, COMPRESSION,  STATS = 10

Se eu fizer o script manualmente de uma restauração do meu backup completo e do backup do log de transações mais próximo que ocorreu após esse backup completo, ele restaurará o backup completo e deixará o banco de dados, NORECOVERYmas o backup do log de transações falhará com o seguinte erro:

Falha de restauração com script manual

Estes são os scripts manuais que escrevi:

USE [master]

RESTORE DATABASE [MyDatabase] 
FROM DISK = N'P:\MyDatabase\MyDatabase_backup_2021_09_16_223001_3540051.bak'
WITH NORECOVERY;

RESTORE LOG [MyDatabase]
FROM DISK = N'P:\MyDatabase\MyDatabase_backup_2021_09_16_223001_4008446.trn'
WITH RECOVERY;

Estranhamente, se eu tentar restaurar o backup do log de transações mais próximo que ocorreu antes do backup completo, recebo a mesma mensagem de erro exata referenciando exatamente os mesmos LSNs. Então é como se meus backups de log de transações não estivessem seguindo a mesma cadeia de backup que meu backup completo?

A única outra informação relevante que consigo pensar é que esses planos de manutenção de backup foram configurados originalmente em uma instância do SQL Server 2016. O servidor dessa instância travou e criamos um novo servidor com uma instância do SQL Server 2019. Eu restaurei todos os bancos de dados de usuários e sistemas de backups (ironicamente) para a nova instância do SQL Server 2019. (Os bancos de dados do sistema que tive que restaurar primeiro em uma instância de 2016 e fazer uma atualização in-loco antes de permitir restaurá-los no novo servidor de 2019.) O único banco de dados que não consegui restaurar para o novo servidor com êxito foi o masterbase de dados. Todo o resto parece estar funcionando bem até agora.

sql-server backup
  • 2 2 respostas
  • 331 Views

2 respostas

  • Voted
  1. Tibor Karaszi
    2021-09-20T06:30:04+08:002021-09-20T06:30:04+08:00

    A conclusão é que você (infelizmente) não pode confiar no SSMS para ajudá-lo na restauração. Porque não dá certo. Eu tenho um caso que relatei em 2014 em que o IMO é ruim, onde o SSMS tenta basear uma sequência de restauração em um backup copy_only, e lembrei a MS sobre isso algumas vezes. Isso caiu em ouvidos surdos, então essa é uma mensagem bastante clara para mim. Veja alguns exemplos: http://sqlblog.karaszi.com/?s=restore .

    No seu caso, não temos o suficiente para reproduzir. E sem uma reprodução, não há nada que possamos fazer exceto dizer algo como "parece ser um bug no SSMS". Não sabemos qual backup você executou, não sabemos o que você clica na GUI, não sabemos quais arquivos de backup você possui no segundo servidor. etc.

    Se você quiser que testemos se você entendeu mal a GUI, nos dê uma reprodução.

    • Todos os comandos T-SQL para começar, onde você produz os backups.
    • Uma reprodução minimalista e uma descrição clara exatamente dos arquivos que você possui.
    • Os comandos de restauração TSQL que você espera que a GUI produza. Certifique-se de que eles funcionem como você espera.
    • E exatamente como você clica na GUI para que possamos reproduzir seu caso.

    Talvez uma tarefa difícil para você, mas sem isso, como mencionei, ficamos com "parece ser um bug no SSMS" ...

    • 2
  2. Best Answer
    J.D.
    2021-09-21T07:33:13+08:002021-09-21T07:33:13+08:00

    Nosso software de backup em nível de servidor, Veeam, aparentemente foi configurado para truncar o log de transações. Eu não tinha conhecimento de que a Veeam pudesse interagir no nível do banco de dados até que o sábio Tibor Karaszi me apontou na direção certa:

    Veeam é uma merda

    (Isso foi configurado muito antes da minha existência. Nota lateral, não vejo absolutamente nenhuma razão para a Veeam oferecer essa opção terrível .)

    Alterar isso para fazer backup dos próprios logs (em vez de ter um plano de manutenção para fazer isso) resolveria o problema. Mas eu prefiro deixar o SQL Server gerenciar os backups nativamente, então apenas desabilitamos o gerenciamento disso no software Veeam Backup & Replication.

    No software Veeam Backup & Replication, na janela Edit Backup Job , na tela Guest Processing , desmarcamos a opção " Enable application-aware processing " para desativá-lo.

    Para referência, esta é a documentação da Veeam sobre como configurá-la para gerenciar o log de transações.

    • 2

relate perguntas

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

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

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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