2009-09-01 16 views
22

Tengo una base de datos SQL2005 Express de la que me gustaría crear una copia en la misma instancia. ¿Cómo haces esto con un guión?¿Cómo hace una copia de seguridad y restaura una base de datos como copia en el mismo servidor?

ya tengo un script para generar la copia de seguridad, pero la restauración está fallando ...

el error:

Msg 3234, Level 16, State 2, Line 2 Logical file 'MyDB_data' is not part of database 'MyDB_Test'. Use RESTORE FILELISTONLY to list the logical file names.
Msg 3013, Level 16, State 1, Line 2 RESTORE DATABASE is terminating abnormally.

LA RESOLUCIÓN:

RESTORE DATABASE [MyDB_Test] 
FROM DISK = 'C:\temp\SQL\MyDB.bak' 
WITH 
MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test.mdf' 
, MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test_log.ldf' 
, REPLACE; 

LA RAZÓN:
No identifiqué correctamente la ruta lógica en mi primer intento.

+0

Esto no es un error de servidor que stion. Estoy escribiendo una aplicación que hará este trabajo ... – RSolberg

+1

Acabo de actualizar mi respuesta después de ver las ediciones que ha realizado. –

Respuesta

38

RESTORE FILELISTONLY es un comando informativo y no está obligado a realizar una restauración. Un usuario puede usar esto para descubrir cuáles son los nombres lógicos para los archivos de datos, que se pueden usar con los comandos MOVE para restaurar la base de datos a una nueva ubicación.

Según lo sugerido por el mensaje de error, debe usar RESTORE FILELISTONLY para ver cuáles son los nombres lógicos para la base de datos. Tu comando de restauración tiene estos errores.

Aquí es un ejemplo práctico de lo que tiene que hacer:

--backup the database 
backup database test1 to disk='c:\test1_full.bak' 

-- use the filelistonly command to work out what the logical names 
-- are to use in the MOVE commands. the logical name needs to 
-- stay the same, the physical name can change 
restore filelistonly from disk='c:\test1_full.bak' 
-------------------------------------------------- 
| LogicalName |   PhysicalName   | 
-------------------------------------------------- 
| test1   | C:\mssql\data\test1.mdf   | 
| test1_log  | C:\mssql\data\test1_log.ldf  | 
------------------------------------------------- 

restore database test2 from disk='c:\test1_full.bak' 
with move 'test1' to 'C:\mssql\data\test2.mdf', 
move 'test1_log' to 'C:\mssql\data\test2.ldf' 
Cuestiones relacionadas