Tengo una aplicación que realiza copias de seguridad y restauraciones de bases de datos SQL, esto funciona bien en la máquina local, sin embargo si ejecuto esto en un servidor SQL alojado en otra máquina obtengo lo siguiente errorC# Copia de seguridad SMO de la base de datos remota a la máquina local
Microsoft.SqlServer.Management.Smo.FailedOperationException: Falló la copia de seguridad para el Servidor '25 .98.30.79 '. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: se produjo una excepción al ejecutar una instrucción o lote de Transact-SQL. ---> System.Data.SqlClient.SqlException: No se puede abrir el dispositivo de copia de seguridad 'C: \ Archivos de programa \ State Manager \ Archive \ Capture \ 20100217152147 * producto * \ bases de datos * base de datos ** base de datos * .bak'. Error del sistema operativo 3 (El sistema no puede encontrar la ruta especificada).
Esto parece estar causado por el servidor SQL que intenta escribir este archivo en su unidad local. No puedo configurar un área compartida en la que se pueda realizar la copia de seguridad debido a restricciones de seguridad.
¿Alguien sabe cómo puedo transferir estos datos a la máquina desde la que se está llamando al código?
Mi código está por debajo.
private string Name;
private string Server;
private string dbName;
private string user;
private string password;
public Boolean performCapture(String archiveDir)
{
String destination = archiveDir + "\\" + Name;
if (!System.IO.Directory.Exists(destination))
{
System.IO.Directory.CreateDirectory(destination);
}
Server sqlServer = connect();
if (sqlServer != null)
{
DatabaseCollection dbc = sqlServer.Databases;
if (dbc.Contains(dbName))
{
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = dbName;
BackupDeviceItem bkpDevice = new BackupDeviceItem(destination + "\\" + dbName + ".bak", DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
bkpDatabase.Incremental = false;
bkpDatabase.Initialize = true;
// Perform the backup
bkpDatabase.SqlBackup(sqlServer);
if (System.IO.File.Exists(destination + "\\" + dbName + ".bak"))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
Tienes razón. No se puede hacer. Pasé unas horas buscando algo hace algunos meses. – Jonathan
Gracias a ustedes dos, parece que mi camino es como lo sugiere Jonathan a continuación. He escrito un pequeño servicio de socket para enviar archivos a petición. –
+1.Tuvimos un momento difícil para descubrir esto. Puede agregar "* excepto * que crea una carpeta de red en su máquina y le dice al servidor Sql que cree allí el archivo de respaldo". –