Restaurar copia seguridad con ubicación distinta a la original

05/12/2007 - 13:01 por Jesús M.G. | Informe spam
Hola, esta pregunta, ya la hice en el grupo de visual basic 6 y nadie supo darme respuesta, por lo que aunque es código visual basic, la hago aqui para ver si hay más suerte:

Restauro una copia de seguridad de la siguiente forma:


Dim oRestore As SQLDMO.Restore

Set oRestore = New SQLDMO.Restore
Set oRestoreEvent = oRestore

oRestore.DataBase = gDatabaseName '// Nombre base datos

oRestore.Files = sNombreFicheroBackup '// ficherocopia.bak

Screen.MousePointer = vbHourglass

oRestore.SQLRestore gSQLServer

Screen.MousePointer = vbDefault

Set oRestoreEvent = Nothing
Set oRestore = Nothing


Todo funciona perfectamente, pero si restauro una copia de seguridad de otro servidor SQL que tiene los archivos lógicos de la base de datos base_dat.mdf y base_log.ldf en otra ruta distinta a donde están los de mi servidor, me da el siguiente error:

Nº-2147216399 [Microsoft][ODBC SQL Server Driver][SQL Server]Error de activación de dispositivo. El nombre de archivo físico 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Data.MDF' puede ser incorrecto.
[Microsoft][ODBC SQL Server Driver][SQL Server]El archivo 'poliza2000_Data' no se puede restaurar en 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Data.MDF'. Utilice WITH MOVE para identificar una ubicación válida para el archivo.
[Microsoft][ODBC SQL Server Driver][SQL Server]Error de activación de dispositivo. El nombre de archivo físico 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Log.LDF' puede ser incorrecto.
[Microsoft][ODBC SQL Server Driver][SQL Server]El archivo 'poliza2000_Log' no se puede restaurar en 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Log.LDF'. Utilice WITH MOVE para identificar una ubicación válida para el archivo.
[Microsoft][ODBC SQL Server Driver][SQL Server]Fin anómalo de RESTORE DATABASE.



Investigando un poco y encontrado la propiedad "RelocateFiles" si le incluyo antes de la operación de restore esto:

oRestore.RelocateFiles = "[poliza2000]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000dat.mdf]," + _
"[poliza2000_log]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000log.ldf]"


Me produce el siguiente error:

-2147218270 [Microsoft][ODBC SQL Server Driver][SQL Server]El archivo lógico 'poliza2000' no es parte de la base de datos 'poliza2000'. Use RESTORE FILELISTONLY para enumerar los nombres de los archivos lógicos.
[Microsoft][ODBC SQL Server Driver][SQL Server]Fin anómalo de RESTORE DATABASE

¿alguien sabe como solucionar este problema?

Gracias


P.D. Se que tengo una forma más fácil de restaurar la base de datos, con cnn.execute "RESTORE DATABASE " pero de esta forma me deja el sistema bloqueado mientras dura el proceso de restauración, y de la forma que intento hacerlo yo con SQL DMO me permite poner una barra de progreso y no se queda pillado el sistema.

Jesús Morales González
Almuñécar (Granada) España
Mesenger: jemogoQUITA@ESTOhotmail.com (sólo para messenger)

Preguntas similare

Leer las respuestas

#6 Gux (MVP)
05/12/2007 - 21:11 | Informe spam
Su error se debe a una confusión entre el nombre lógico de la base y los
nombres físicos de los archivos de la base.

El nombre lógico de la base es POLIZA2000. Los nombres físicos de los
archivos de la base son POLIZA2000_DATA.MDF y POLIZA2000_LOG-LDF, para los
archivos de datos y log de transacciones respectivamente.

Cuando se desconoce esa información, antes de hacer un RESTORE se sugiere
hacer un RESTORE FILELISTONLY que muestra información acerca de los archivos
físicos contenidos en el respaldo.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jesús M.G." wrote:

Ya lo tengo!!! :) Estaba empeñado en hacerlo así:

oRestore.RelocateFiles = "[poliza2000]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000dat.mdf]," + _
"[poliza2000_log]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000log.ldf]"

Pues si miro mi BD en el administrador corporativo, esta se llama "Poliza2000" bien, pues la forma correcta de hacerlo es esta:

oRestore.RelocateFiles = "[poliza2000_data]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000dat.mdf]," + _
"[poliza2000_log]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000log.ldf]"

No se llama "poliza2000" si no "poliza2000_data" :-/

De todas formas mil gracias por la ayuda a ambos.

Saludos

Jesús Morales González
Almuñécar (Granada) España
Mesenger: (sólo para messenger)

"Jesús M.G." escribió en el mensaje news:
Hola, esta pregunta, ya la hice en el grupo de visual basic 6 y nadie supo darme respuesta, por lo que aunque es código visual basic, la hago aqui para ver si hay más suerte:

Restauro una copia de seguridad de la siguiente forma:


Dim oRestore As SQLDMO.Restore

Set oRestore = New SQLDMO.Restore
Set oRestoreEvent = oRestore

oRestore.DataBase = gDatabaseName '// Nombre base datos

oRestore.Files = sNombreFicheroBackup '// ficherocopia.bak

Screen.MousePointer = vbHourglass

oRestore.SQLRestore gSQLServer

Screen.MousePointer = vbDefault

Set oRestoreEvent = Nothing
Set oRestore = Nothing


Todo funciona perfectamente, pero si restauro una copia de seguridad de otro servidor SQL que tiene los archivos lógicos de la base de datos base_dat.mdf y base_log.ldf en otra ruta distinta a donde están los de mi servidor, me da el siguiente error:

Nº-2147216399 [Microsoft][ODBC SQL Server Driver][SQL Server]Error de activación de dispositivo. El nombre de archivo físico 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Data.MDF' puede ser incorrecto.
[Microsoft][ODBC SQL Server Driver][SQL Server]El archivo 'poliza2000_Data' no se puede restaurar en 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Data.MDF'. Utilice WITH MOVE para identificar una ubicación válida para el archivo.
[Microsoft][ODBC SQL Server Driver][SQL Server]Error de activación de dispositivo. El nombre de archivo físico 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Log.LDF' puede ser incorrecto.
[Microsoft][ODBC SQL Server Driver][SQL Server]El archivo 'poliza2000_Log' no se puede restaurar en 'D:\Microsoft SQL Server\MSSQL\data\poliza2000_Log.LDF'. Utilice WITH MOVE para identificar una ubicación válida para el archivo.
[Microsoft][ODBC SQL Server Driver][SQL Server]Fin anómalo de RESTORE DATABASE.



Investigando un poco y encontrado la propiedad "RelocateFiles" si le incluyo antes de la operación de restore esto:

oRestore.RelocateFiles = "[poliza2000]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000dat.mdf]," + _
"[poliza2000_log]" + "," + "[C:\PolizaCS\Bases\MSSQL$POLIZA\Data\poliza2000log.ldf]"


Me produce el siguiente error:

-2147218270 [Microsoft][ODBC SQL Server Driver][SQL Server]El archivo lógico 'poliza2000' no es parte de la base de datos 'poliza2000'. Use RESTORE FILELISTONLY para enumerar los nombres de los archivos lógicos.
[Microsoft][ODBC SQL Server Driver][SQL Server]Fin anómalo de RESTORE DATABASE

¿alguien sabe como solucionar este problema?

Gracias


P.D. Se que tengo una forma más fácil de restaurar la base de datos, con cnn.execute "RESTORE DATABASE " pero de esta forma me deja el sistema bloqueado mientras dura el proceso de restauración, y de la forma que intento hacerlo yo con SQL DMO me permite poner una barra de progreso y no se queda pillado el sistema.

Jesús Morales González
Almuñécar (Granada) España
Mesenger: (sólo para messenger)


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida