Ao usar RESTORE FILELISTONLY para restaurar um banco de dados usando código, o nome_lógico dos arquivos retorna como 423.
No entanto, quando faço uma restauração manual do banco de dados, o nome do arquivo lógico parece ser 3497.
Estou executando o SQL Server 2008 R2. Alguém já se deparou com algo assim antes? Como faço para consertar isso?
Então, o que parece que está acontecendo é:
foo
com um nome de arquivo de dados lógicosfoo
.bar
).bar
banco de dados.bar
backup como outro nome de banco de dados e seu código assume que o nome de arquivo lógico para o arquivo de dados do banco de dadosbar
deve serbar
. Mas não é, ainda éfoo
!Você também pode inserir algum aleatório
ALTER DATABASE x MODIFY FILE (name = 'y', newname = 'z');
lá para torná-lo ainda mais confuso para você (não importa o seu código). Especialmente se - como acontece no seu caso - você estiver armazenando vários backups em um único arquivo de backup. Isso pode ser ruim, independentemente de ser o mesmo banco de dados, mas os nomes de arquivo lógico mudam com o tempo ou de bancos de dados diferentes sendo copiados para o mesmo arquivo. Você precisa determinar qual número de arquivo está realmente procurando e especificar isso na opçãoFILELISTONLY
'sWITH FILE =
. Melhor ainda, pare de reutilizar o mesmo arquivo para vários backups.Você deve ter certeza de que, ao restaurar um novo banco de dados com base no backup de outro, use
WITH MOVE
para fornecer aos nomes de arquivo lógico caminhos físicos significativos e, em seguida, useMODIFY FILE
imediatamente depois para tornar os próprios nomes lógicos significativos.Para ajudar a descobrir de onde vem a discrepância real para um caso específico que você está enfrentando (não consegui reproduzir um caso em que
RESTORE FILELISTONLY
mostrava valores diferentes da interface do usuário de restauração no SSMS), você pode fornecer um arquivo .bak em algum serviço de compartilhamento de arquivos, e poderíamos nos olhar. Sua descrição de quais são os nomes dos arquivos e o que deveriam ser é extremamente difícil de seguir.