none
Error al restaurar base de datos.

    Question

  • Hola buenas, les cuento:

    Estoy restaurando una base de datos sql server 2008 atraves de c# con las clases de Sqlserver.smo y las demas.

    El problema lo tengo al restaurar en el servidor,  el error me dice que el servidor no puede encontrar las rutas indicadas "C:\RUTA log|data|etc"
    las rutas que aparecen en el servidor, son las rutas del server1 que fue desde donde cree el bakcup. el error es similar a este.

    "System.Data.SqlClient.SqlError: Error al buscar el archivo "D:\Archivos de
    programa\Microsoft SQL Server\MSSQL\Data\DB_Data.MDF" en los directorios,
    error del sistema operativo: 3(El sistema no puede hallar la ruta
    especificada.). (Microsoft.SqlServer.Smo)"


    el codigo que estoy utilizando es este:

     

    ServerConnection osCon = new ServerConnection(servidor);
    
        osCon.LoginSecure = false;
    
        osCon.Login = usuario;
    
        osCon.Password = password;
    
        srvSql = new Server(osCon);
    
        Restore oRestore = new Restore();
    
        oRestore.Action = RestoreActionType.Database;
    
        oRestore.Database = "NombreBD"; 
        
        BackupDeviceItem obackupd = new BackupDeviceItem(bdbackup, DeviceType.File);
    
        oRestore.Devices.Add(obackupd);
    
        oRestore.ReplaceDatabase = true;
    
        oRestore.SqlRestore(srvSql);
    

     

    Si alguien me ayuda o me pega un aventon estare muy agradecido, ya que debiera dejar este tema terminado esta semana a mas tardar mañana. Estare atento por si necesitan mas detalles de la descripcion del error.

     

    Saludos

    Francisco M.

     

     


    Monday, May 09, 2011 2:08 AM

Answers

All replies

  • Tanto la ruta donde está el archivo de backup como la ruta donde se restauran los archivos de las bases de datos tienen que ser locales al servidor donde estás restaurando. Verifica ambos casos y nos cuentas
    Monday, May 09, 2011 6:37 AM
  • El problema es que la ruta de los data y log se va en el backup.

    1.-Creo un backup (.bak) desde la maquina A1

    2.-Trato de levantar el backup (por codigo) desde la maquina A2 y el archivo me muestra las rutas de la maquina A1.

     

    Saludos.

    Monday, May 09, 2011 12:45 PM
  • Hola.

    Ese es el comportamiento por defecto, pero puedes usar los modificadores "with move" de la instrucción de backup para dejar los ficheros allí donde quieras en el servidor de destino. Sin embargo, desde C# no puedes usar esta opción, has de ejecutar un script de T-SQL para hacerlo (como si lanzaras una select, vamos).

    Tienes aquí lo necesario para montar dicha sentencia:

    http://msdn.microsoft.com/es-es/library/ms186858.aspx

    Te dejo también un ejemplo de aplicación en el que puedes obtener pistas sobre cómo desarrollarlo:

    http://www.codeproject.com/KB/database/mft_jet_restore.aspx

     


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    Monday, May 09, 2011 1:20 PM
    Moderator
  • te cuento que el codigo que tenia para restaurar el backup era por medio de instrucciones t-sql pero las rutas las escribia yo. Por lo tanto no eran dinamicas.
    Que pasaria si quien esta montando la base de datos no tiene el sql server por defecto en "C:\program data\sql\etc".

    No tiene mucho sentido, la restauracion es parte de un proceso de instalacion, donde el usuario selecciona el path de destino en uno de los pasos.

    Existe algun metodo o propiedad para que sql se encargue de manejas las rutas el?

    Lo otro que pense fue poner los archivos (mdf, ldf, etc) en el midmo directorio de destino de instalacion, que seria un directorio dinamico puesto que lo selecciona el usuario.

     

    Saludos.

    Monday, May 09, 2011 1:30 PM
  • Revisa la respuesta que te dio Alberto: si el usuario selecciona el directorio de instalación, usa entonces la cláusula WITH MOVE de la instrucción RESTORE para indicárselo.
    Monday, May 09, 2011 1:41 PM
  • ok, es lo que pensaba.

    Muchas gracias por desnublarme muchachos.

     

    Monday, May 09, 2011 1:47 PM