Erro de restauração do banco de dados do SQL Server: o cast especificado não é válido. (SqlManagerUI)

91

Estou usando o SQL Server 2008 R2 Standard (versão 10.50.1600.1) para meu site de produção e a edição SQL Server Express com Advanced Services (v10.50.1600.1) para meu host local como um banco de dados.

Poucos dias atrás, meu SQL Server travou e eu tive que instalar uma nova versão 2008 R2 Express em meu host local. Funcionou bem quando restaurei algumas versões mais antigas retiradas da edição Express, mas quando tento restaurar o banco de dados de um .bakarquivo que é retirado do servidor de produção, está causando o seguinte erro:

Erro: o elenco especificado não é válido. (SqlManagerUI)

e quando tento restaurar o banco de dados usando o comando

Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'

Isso gera um erro diferente

Msg 3154, nível 16, estado 4, linha 1
O conjunto de backup contém um backup de um banco de dados diferente do banco de dados 'Publicações' existente.
Msg 3013, nível 16, estado 1, linha 1
RESTORE DATABASE está sendo encerrado de forma anormal.

Eu verifiquei as versões. Todos eles parecem combinar comigo, conforme mostrado na imagem abaixo

Anteriormente, eu conseguia restaurar um banco de dados da versão padrão para a edição expressa, mas agora ele falha. Excluí o banco de dados e tentei recriá-lo. Isso também falha.

Não tenho certeza do que estou fazendo de errado. Eu agradeceria ajuda nisso em relação

O problema foi resolvido , pois parece que o arquivo .bak estava corrompido. Quando tentei com um arquivo diferente, funcionou.

Aprendendo
fonte
Eu não sou profissional nisso, mas uma pergunta rápida, a arquitetura x86 e x64 no banco de dados é compatível?
Gustav Klimt
Eu tinha um banco de dados de restauração anterior naquela época e não tive esse problema. por algum motivo agora está gerando erros, não tenho certeza se o agrupamento do servidor de banco de dados está criando algum problema
Aprendizado em
Tente adicionar ,REPLACEao comando T-SQL para sobrescrever o banco de dados AlHabtoorPublications existente.
SchmitzIT
Eu tive o mesmo problema hoje no trabalho ... Parece que verificar o tamanho do arquivo após a transferência do FTP não é suficiente. Parece que o arquivo é muito sensível. Resolvido o problema compactando o arquivo antes de executar a transferência.
rofans91
Scenerio Eu fiz backup do banco de dados no SQL SERVER 2008 e tentei restaurá-lo no SQL SERVER 2008 R2. Idealmente, ele deve funcionar bem, mas ao selecionar o arquivo de backup, o SQL Management Studio 2208 R2 estava gerando o erro "O elenco especificado não foi especificado. (SqlManagerUI)". Motivo e solução de problemas Isso ocorreu devido à corrupção do arquivo .BAK durante a transferência de FTP (o modo de transferência é definido como ASCII). Sempre, lembre-se de definir o modo de transferência de FTP para BINÁRIO ao transferir o arquivo .BAK do banco de dados.
Rohan Sarkar de

Respostas:

40

A GUI pode ser instável às vezes. O erro que você obteve ao usar o T-SQL é porque você está tentando sobrescrever um banco de dados existente, mas não especificou para sobrescrever / substituir o banco de dados existente. O seguinte pode funcionar:

Use Master
Go
RESTORE DATABASE Publications
  FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
  WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten.
SchmitzIT
fonte
Estranho, reutilizei sua declaração original. Em qualquer caso, a única coisa que adicionei foi a última linha: , REPLACE
SchmitzIT
1
Na verdade, o Failed: 38indica reached end of the file. (Em uma janela de comando, execute NET HELPMSG 38). Isso geralmente indica um backup corrompido: stackoverflow.com/questions/5656363/…
SchmitzIT
Eu testei a restauração com um arquivo .bak um pouco mais antigo que foi restaurado sem nenhum problema. Parece que este arquivo .bak específico está corrompido
Aprendendo em
Pode ter sido o resultado do acidente. Pode ter bagunçado partes do disco. Fico feliz em saber que você conseguiu resolver o problema com um backup diferente :)
SchmitzIT
O script gera a seguinte mensagem de erro 3203, Nível 16, Estado 1, Linha 1 Falha ao ler "C: \ Publications.bak": 38 (falha ao recuperar texto para este erro. Motivo: 15105) Mensagem 3013, Nível 16, Estado 1 , Linha 1 RESTORE DATABASE está terminando de forma anormal.
Aprendizado em
163

Pode ser devido à restauração do arquivo de backup da versão do SQL Server 2012 no SQL Server 2008 R2 ou até menos.

Subhash Makkena
fonte
4
Seria necessário usar "Gerar Script".
kroiz
4
Esse era o meu problema. Parece que não seria muito difícil para a MS dar uma mensagem mais útil para alguns desses casos.
John Gilmer
Pinal Dave explica as razões aqui - blog.sqlauthority.com/2015/06/01/…
shrivb
15

Finalmente recebi este erro para ir embora em uma restauração. Mudei para o SQL2012 por frustração, mas acho que provavelmente ainda funcionaria no 2008R2. Tive que usar os nomes lógicos:

RESTORE FILELISTONLY
FROM DISK = location of your.bak file

E a partir daí executei uma instrução de restauração MOVEusando nomes lógicos.

RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'

Quando terminei de restaurar, quase chorei de alegria.

Boa sorte!

Sara Anderson Noonan
fonte
4

Abaixo podem estar 2 motivos para este problema:

  1. O backup feito no SQL 2012 e o Restore Headeronly foi feito no SQL 2008 R2

  2. A mídia de backup está corrompida.

Se executarmos o comando abaixo, podemos encontrar o erro real sempre:

restore headeronly
from disk = 'C:\Users\Public\Database.bak'

Forneça a localização completa do seu arquivo de banco de dados no quot

Espero que ajude

Keren Caelen
fonte