SQL Server – Wiederherstellung von Datenbanken aus einem Backup

Nachdem bereits eine Lösung für ein automatisches Backup von SQL Datenbanken vorgestellt wurde, geht es in diesem Beitrag um die Wiederherstellung mehrerer SQL Datenbanken aus einem Backup mittels Script.

Lösung

Über das SQL Management Studio mit dem SQL-Server verbinden und mit einem Rechtklick den Punkt Neue Abfrage wählen.

Hinweis: Der Benutzer muss mindestens Rechte als dbcreator besitzen.

Das unten stehende SQL-Script in das Abfragefenster kopieren und die drei Parameter anpassen.

  • SET @backuppath = ‚BACKUPPATH
  • SET @datapath = ‚DATAPATH‘
  • SET @logpath = ‚LOGPATH
DECLARE @name VARCHAR(256) -- database name  
DECLARE @backuppath NVARCHAR(256) -- path for backup files  
DECLARE @datapath VARCHAR(256) -- path for data files  
DECLARE @logpath VARCHAR(256) -- path for log files  
DECLARE @backupfileName VARCHAR(256) -- filename for backup  
DECLARE @datafileName VARCHAR(256) -- filename for database 
DECLARE @logfileName VARCHAR(256) -- filename for logfile 
DECLARE @logName VARCHAR(256) -- filename for logfile 

-- specify database backup directory 
print 'backup path is ' + @backuppath 
print 'data path is ' + @datapath 
print 'log path is ' + @logpath 

--Table to hold each backup file name in 
DROP TABLE #files -- remove any previous instance 
CREATE TABLE #files(fname varchar(200),depth int, file_ int) 
INSERT #files 
EXECUTE master.dbo.xp_dirtree @backuppath, 1, 1 
SELECT * FROM #files 
DECLARE files CURSOR FOR 
SELECT fname FROM #files  
OPEN files 
FETCH NEXT FROM files INTO @name
WHILE @@FETCH_STATUS = 0   

BEGIN 
DECLARE @cleanname AS VARCHAR(255) 
SET @cleanname  = REPLACE(@name, '.BAK', '') 
PRINT @cleanname 
SET @backupfileName = @backuppath + @name 
SET @datafileName = @datapath + @cleanname   + '.MDF' 
SET @logfileName = @logpath + @cleanname   + '_log.LDF' 
SET @logName = @cleanname + '_log' 
print 'backup file is ' + @backupfileName 
print 'data file is ' + @datafileName 
print 'log file is ' + @logfileName 
RESTORE DATABASE @cleanname 
FROM DISK = @backupfileName 
WITH RECOVERY, 
MOVE @cleanname 
TO @datafileName, 
MOVE @logName 
TO @logfileName 
FETCH NEXT FROM files INTO @name   
END

CLOSE files   
DEALLOCATE files 

Hier ein Beispiel:

Wurde das Script angepasst, wird es mit einem Klick auf Ausführen gestartet.

Je nach Umfang und Größe der wiederherzustellenden Datenbanken, kann es eine Weile dauern, bis die Wiederherstellung abgeschlossen wurde.

Im Fenster Meldungen können aktuelle Logs betrachtet werden.

Nachdem das Script durchlaufen und alle Datenbanken wiederhergestellt wurden, sind diese im Objekt-Explorer zu finden.