Estoy usando el siguiente comando para restaurar una base de datos como parte de la instalación de un programa.

SqlCmd -S .\<SqlInstance> -h -1 -U <username> -P <password> -Q "RESTORE DATABASE <Database> FROM DISK=<FilePath>"

Cuando ejecuto este comando, la base de datos se restaura correctamente, pero hay un solo sproc que no existe. Sin embargo, cuando tomo el mismo archivo y restauro la base de datos a través de SSMS, ese sproc existe y la base de datos se restaura correctamente. Esta es la única diferencia entre los dos métodos para restaurar la base de datos y no puedo administrar cada instalación manualmente, ya que se instalará en más de 300 máquinas.

Si hay alguna otra información que pueda proporcionar para aclarar, me complacerá proporcionársela.

Editar:

Según los comentarios, encontré que se estaba ejecutando el comando T-SQL

USE [master]
RESTORE DATABASE [ErplyAnalysis] FROM  DISK = N'<FilePath>' WITH  FILE = 2,  NOUNLOAD,  STATS = 5

GO
0
GameFire 26 ago. 2020 a las 18:12

1 respuesta

La mejor respuesta

Está restaurando diferentes conjuntos de copias de seguridad en los diferentes comandos. Si solo miramos las 2 declaraciones, tiene:

RESTORE DATABASE <Database> FROM DISK=<FilePath>

Y luego en SSMS:

RESTORE DATABASE [ErplyAnalysis] FROM  DISK = N'<FilePath>' WITH  FILE = 2,  NOUNLOAD,  STATS = 

Observe que en SSMS tiene FILE = 2.

De forma predeterminada, si se omite FILE, utilizará su valor predeterminado de 1 (consulte RESTORE Arguments (Transact-SQL)). Como resultado, en sqlcmd está restaurando una versión anterior de su base de datos.

Tiene 2 conjuntos ya que no reinicializó la copia de seguridad cuando la hizo. Eso no es un problema, pero significa que debe asegurarse de verificar qué valor debe pasar para FILE si está utilizando conjuntos de respaldo.

0
Larnu 26 ago. 2020 a las 17:07