una seguridad restaurar puede porque log hay hacer for failed existente error ejecutar distinta datos copia contiene conjunto actual sql-server database exception-handling restore sql-server-2012

sql server - puede - Error al restaurar la copia de seguridad de la base de datos



restaurar backup sql server 2012 en sql 2008 (11)

Al restaurar, en Archivos, marque ''Reubicar todos los archivos en la carpeta''

Recibo un error al utilizar SQL Server 2012 al restaurar una copia de seguridad realizada con una versión anterior (SQL Server 2008). De hecho, tengo varios archivos de copia de seguridad de la misma base de datos (tomados en diferentes momentos en el pasado). Los más nuevos son restaurados sin ningún problema; Sin embargo, uno de ellos da el siguiente error:

System.Data.SqlClient.SqlError: La búsqueda en el directorio para el archivo "C: / PROGRAM FILES / MICROSOFT SQL SERVER / MSSQL.1 / MSSQL / DATA / MYDB_ABC.MDF" falló con el error del sistema operativo 3 (El sistema no puede encontrar la ruta especificado.). (Microsoft.SqlServer.SmoExtended)

Esta es una máquina x64, y mi (s) archivo (s) de base de datos están en esta ubicación: c:/Program Files/Microsoft SQL Server/MSSQL11.MSSQLSERVER/MSSQL .

No entiendo por qué intenta restaurar en MSSQL.1 y no en MSSQL11.MSSQLSERVER .


Como ya se ha dicho varias veces, la restauración de una copia de seguridad donde las rutas nuevas y antiguas de los archivos mdf y ldf no coinciden puede causar este error. Ya hay varios buenos ejemplos de cómo lidiar con eso con SQL, pero ninguno de ellos funcionó para mí hasta que me di cuenta de que en mi caso tenía que incluir las extensiones ''.mdf'' y ''.ldf'' en la parte de la declaración ''MOVE'', por ejemplo:

RESTORE DATABASE [SomeDB] FROM DISK = N''D:/SomeDB.bak'' WITH MOVE N''SomeDB.mdf'' TO N''D:/SQL Server/MSSQL12.MyInstance/MSSQL/DATA/SomeDB.mdf'', MOVE N''SomeDb_log.ldf'' TO N''D:/SQL Server/MSSQL12.MyInstance/MSSQL/DATA/SomeDB_log.ldf''

Espero que eso le ahorre a alguien, no pude entender por qué SQL estaba sugiriendo que necesitaba usar la opción WITH MOVE cuando ya lo estaba haciendo.


En caso de que esto sea útil para alguien que trabaja directamente con Powershell (usando la biblioteca SMO ), en este caso particular también hubo archivos de datos secundarios. Mejoré un poco el script matando cualquier proceso abierto y luego haciendo la restauración.

Import-module SQLPS $svr = New-Object ("Microsoft.SqlServer.Management.Smo.Server") "server name"; $svr.KillAllProcesses("database_name"); $RelocateData1 = New-Object "Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" ("primary_logical_name","C:/.../SQLDATA/DATA/database_name.mdf") $RelocateData2 = New-Object "Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" ("secondary_logical_name_2","C:/.../SQLDATA/DATA/secondary_file_2.mdf") $RelocateData3 = New-Object "Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" ("secondary_logical_name_3","C:/.../SQLDATA/DATA/secondary_file_3.mdf") $RelocateLog = New-Object "Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" ("database_name_log","C:/.../SQLDATA/LOGS/database_name_log.ldf") Restore-SqlDatabase -ServerInstance "server-name" -Database "database_name" -BackupFile "//BACKUPS//database_name.bak" -RelocateFile @($RelocateData1, $RelocateData2, $RelocateData3, $RelocateLog) -ReplaceDatabase


Hay algún problema de versión en esto. Puede migrar su base de datos a 2012 por 2 otros métodos: -

1) desconecte la base de datos> copie los archivos .mdf y .ldf a la carpeta de datos del servidor de destino y adjunte la base de datos. consulte esto: - https://dba.stackexchange.com/questions/30440/how-do-i-attach-a-database-in-sql-server

2) Cree un script de toda la base de datos con esquema y datos y ejecútelo en el servidor de destino (el proceso es muy lento y lleva tiempo). Consulte esto: - Generar script en SQL Server Management Studio


He logrado hacer esto desde el código. Esto no fue suficiente

Restore bkp = new Restore(); bkp.PercentCompleteNotification = 1; bkp.Action = RestoreActionType.Database; bkp.Database = sDatabase; bkp.ReplaceDatabase = true;

La propiedad RelocateFiles debe completar con los nombres y las rutas de los archivos que se reubicarán. Para cada archivo debe especificar el nombre del archivo y la nueva ruta física. Así que lo que hice fue mirar el PrimaryFilePath de la base de datos que estaba restaurando, y usarlo como la ubicación física. Algo como esto:

if (!string.IsNullOrEmpty(sDataFileName) && !File.Exists(sDataFileName)) { if (originaldb != null) { if (string.Compare(Path.GetDirectoryName(sDataFileName), originaldb.PrimaryFilePath, true) != 0) { string sPhysicalDataFileName = Path.Combine(originaldb.PrimaryFilePath, sDatabase + ".MDF"); bkp.RelocateFiles.Add(new RelocateFile(sLogicalDataFileName, sPhysicalDataFileName)); } } }

Lo mismo para el archivo de registro.


Intente desmarcar la opción "Copia de seguridad de registro de cola" en la página Opciones del cuadro de diálogo Restaurar base de datos


Intente reiniciar el servicio SQL. Trabajó para mi.


La copia de seguridad almacena la ubicación original de los archivos de la base de datos y, de forma predeterminada, intenta restaurar la misma ubicación. Dado que la instalación de su nuevo servidor está en directorios nuevos y, presumiblemente, los directorios antiguos ya no existen, debe modificar los directorios de los valores predeterminados para que coincidan con la ubicación que desea que use.

Dependiendo de cómo esté restaurando la base de datos, la manera de hacerlo será diferente. Si está usando SSMS, mire las pestañas y las listas hasta que encuentre la lista de archivos y sus ubicaciones de disco asociadas; luego puede editar esas ubicaciones antes de restaurar.


Parece que la copia de seguridad se realizó en una máquina cuyas rutas no coinciden con las suyas. Intente realizar la copia de seguridad utilizando T-SQL en lugar de la interfaz de usuario. También asegúrese de que las rutas que está especificando realmente existan y que no haya una copia de estos archivos mdf / ldf allí.

RESTORE DATABASE MYDB_ABC FROM DISK = ''C:/path/file.bak'' WITH MOVE ''mydb'' TO ''c:/valid_data_path/MYDB_ABC.mdf'', MOVE ''mydb_log'' TO ''c:/valid_log_path/MYDB_ABC.ldf'';


Por favor cambie la ruta del archivo .mdf. Simplemente cree una carpeta en cualquier unidad, es decir, en la unidad "D", simplemente cree una carpeta con nombre personalizado (base de datos) y señale la ruta a la nueva carpeta, mssql creará los archivos automáticamente.

"C: / PROGRAM FILES / MICROSOFT SQL SERVER / MSSQL.1 / MSSQL / DATA / MYDB_ABC.MDF" a "D: / dbase / MYDB_ABC.MDF"


Tuve el mismo problema, y ​​esto se solucionó sin ningún código C #:

USE [master] ALTER DATABASE [MyDb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [MyDb] FROM DISK = N''D:/backups/mydb.bak'' WITH FILE = 1, MOVE N''MyDb'' TO N''''c:/valid_data_path/MyDb.mdf'', MOVE N''MyDb_log'' TO N''/valid_log_path/MyDb.ldf'', NOUNLOAD, REPLACE, STATS = 5 ALTER DATABASE [MyDb] SET MULTI_USER

IR