2009-09-01 6 views
22

Ich habe eine SQL2005 Express-Datenbank, die ich eine Kopie von auf der gleichen Instanz erstellen möchte. Wie gehst du mit einem Skript vor?Wie sichern und wiederherstellen Sie eine Datenbank als Kopie auf demselben Server?

ich ein Skript bereits für das Backup zu erzeugen, aber die Wiederherstellung fehlschlägt ...

den Fehler:

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.

DIE AUFLÖSUNG:

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; 

DER GRUND:
Ich habe den logischen Pfad bei meinem ersten Versuch nicht korrekt identifiziert.

+0

Dies ist kein Server Fault que stion. Ich schreibe eine Anwendung, die diese Arbeit erledigen wird ... – RSolberg

+1

Ich habe gerade meine Antwort aktualisiert, nachdem ich die Änderungen gesehen habe, die Sie vorgenommen haben. –

Antwort

38

RESTORE FILELISTONLY ist ein Informations Befehl und ist nicht erforderlich, eine Wiederherstellung durchzuführen. Ein Benutzer kann dies verwenden, um herauszufinden, was die logischen Namen für die Datendateien sind, die mit den MOVE-Befehlen verwendet werden können, um die Datenbank an einem neuen Speicherort wiederherzustellen.

Wie von der Fehlermeldung vorgeschlagen, müssen Sie RESTORE FILELISTONLY verwenden, um zu sehen, was die logischen Namen für die Datenbank sind. Dein Wiederherstellungsbefehl hat diese Fehler. Hier

ist ein funktionierendes Beispiel dafür, was Sie tun müssen:

--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' 
Verwandte Themen