Tenho a tarefa de fazer cópias periódicas do banco de dados, duas vezes ao dia, e não devo quebrar nenhuma cadeia de backup nem acumular esses backups temporários. Então, tentei fazer um copy_only
backup init
para substituir o único arquivo de backup.
Meu banco de dados é criptografado usando TDE .
Eu uso backup compression
no nível do servidor, "padrão de compactação de backup" é 1 no meu sys.configurations. Eu não uso a with compression
opção explícita no meu comando.
Aqui minha @@versão completa:
Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) - 15.0.4073.23 (X64) 23 de setembro de 2020 16:03:08 Copyright (C) 2019 Microsoft Corporation Enterprise Edition (64 bits) no Windows Server 2016 Datacenter 10.0 (Build 14393) : ) (Hipervisor)
Meu problema é esse erro abaixo:
Msg 3241, Level 16, State 40, Line 8 A família de mídia no dispositivo 'W:\SQL_backup\copy_only\billing_prod2_test.bak' está formada incorretamente. O SQL Server não pode processar esta família de mídia. Msg 3013, Level 16, State 1, Line 8 RESTORE DATABASE está terminando de forma anormal.
Aqui está o código completo que executei:
backup database billing_prod2
to disk = 'W:\SQL_backup\copy_only\billing_prod2_test.bak'
with init, copy_only--, format;
go
restore database billing_1
from disk = 'W:\SQL_backup\copy_only\billing_prod2_test.bak'
with move 'billing_prod2' to 'E:\SQL_data\billing_1.mdf',
move 'billing_prod2_log' to 'E:\SQL_data\billing_1_log.ldf',
replace
A primeira vez que executa sem erros, o tamanho do backup completo é de cerca de 35Mb e restaura perfeitamente.
Na segunda vez, o backup é executado sem erros, mas estranhamente tem um tamanho de 260Mb. Esse é o tamanho que vejo no disco e o mesmo tamanho está escrito na saída do restore headeronly
que ainda executa sem erros. Mas quando eu faço restore database
o erro mencionado acima aparece.
Tentei executar o mesmo código usando outro db e outro disco para salvar o backup mas o resultado é sempre o mesmo: na primeira vez funciona, na segunda vez o arquivo é sobrescrito mas tem tamanho diferente que não é apenas um tamanho duplo, é quase 10 vezes o tamanho inicial. restore headeronly
nunca falha e sempre relata apenas um arquivo dentro do arquivo de backup, mas o tamanho é multiplicado e restore database
falha.
Somente quando adicionei format
a opção, o tamanho do backup tornou-se normal e a restauração foi bem-sucedida.
Minha pergunta é: por que devo usar o formato com meu backup neste caso para poder restaurar?
Este é realmente um bug no SQL Server. Nós (@sepupic e eu) tivemos algumas discussões offline e conseguimos diminuir as circunstâncias: O erro ocorre quando:
Reprodução: