2010-02-17 13 views
9

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; 
     } 
    } 

Respuesta

15

No, esto nunca funcionará - SQL Server solo puede realizar una copia de seguridad en una unidad conectada físicamente a la máquina de SQL Server actual. Usted no puede bajo ninguna circunstancia realizar una copia de seguridad de un servidor SQL remoto en su disco duro local, simplemente no es posible (ni en SMO ni en SQL Server Management Studio).

+0

Tienes razón. No se puede hacer. Pasé unas horas buscando algo hace algunos meses. – Jonathan

+1

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

+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". –

1

Como dijo Marc_s, no se puede hacer. Como workarround, hace que su base de datos llame a un programa de línea de comandos en el host, que envíe el archivo por ftp, cópielo en alguna carpeta compartida u otra cosa.

buena suerte

+0

cierto, pero incluso aquí, primero debe almacenar la copia de seguridad en la máquina del servidor en alguna parte ...... –

+1

por supuesto ... no hay otra manera. – Jonathan

1

Sé que es un antiguo puesto pero sí puede copia de seguridad de una base de datos de SQL Server remota

que acaba de crear el mismo nombre de la carpeta y la unidad tanto en el equipo remoto y local de

ejemplo:

d: \ sql_backup en el equipo local d: \ sql_backup en el equipo remoto

y lo hará ... por supuesto el archivo de copia de seguridad estará en el equipo remoto

si desea obtener los archivos de copia de seguridad, simplemente compartir la carpeta del equipo remoto

saludos rubenc

1

Puede copiar la base de datos remota a local. Para copiar use esto: Haga clic con el botón derecho en la base de datos remota en SSMS: Tareas -> Exportar datos. En la ventana abierta, elija la base de datos de origen y destino, se copiarán todos los datos de la fuente (remota) a su base de datos local.

Cuestiones relacionadas