Ein dynamisches Skript zum Wiederherstellen der SQL Server-Datenbank aus einer gespeicherten Prozedur
Prozess
Der Prozess des Wiederherstellens einer Datenbank kann über SSMS per Skript ausgeführt werden. Wenn dies in einer gespeicherten Prozedur gespeichert wird, kann es von anderen verarbeiteten oder Servern aufgerufen werden und ist besonders nützlich als Teil eines zusammengefügten Wartungsplans.
Unten haben wir zwei Skripte erstellt.
Verwenden Sie mit dem einfachen Skript den aus SSMS generierten Code und ersetzen Sie den Inhalt der gespeicherten Prozedur.
Mit dem generischen Skript können einzelne Datenbanken mithilfe von Variablen wiederhergestellt werden, sodass Sie sie wiederverwenden können.
Simple Script
USE [utilities]GOCREATE PROC [maint].RestoreDatabase_{dbname} AS BEGINRESTORE DATABASE [dbname] FROM DISK=N'c:\backupfolder\{dbname}.bak' WITH FILE= 1,MOVE N'{dbname}' TO N'd:\database\{dbname}.mdf',MOVE N'{dbname}_log' TO N'e:\database\{dbname}.ldf',NOUNLOAD, REPLACE, STATS= 10,STANDBY=N'e:\database\ROLLBACK_UNDO_{dbname}.bak'ENDGO
Wiederverwendbares Skript
Dieses Skript verwendet eine Reihe von Parametern, damit es von einer anderen Stelle aufgerufen werden kann. Es kann also wiederverwendet und bei Bedarf als serverübergreifend bezeichnet werden.
- @dbname - Datenbankname, den Sie aufrufen möchten
- @Directory_Bak - Ordner, in dem die Backups gespeichert sind
- @Directory_Dat - Es ist am besten, Protokolldateien und Datenbankdateien auf verschiedenen Festplatten zu speichern. Dies ist also das Verzeichnis, in dem Sie es speichern möchten
- @Directory_Log - Verwenden Sie wie oben beschrieben ein separates Verzeichnis für Ihre Protokolldatei
- @Directory_Stand - Dies wurde unter Berücksichtigung des Protokollversands entwickelt, sodass hiermit eine Wiederherstellung von Ihrer Hauptdatenbank in die Berichtsdatenbank durchgeführt werden kann
SQL
USE [utilities]GOCREATE PROC [maint].RestoreDatabase(@dbname NVARCHAR(100),@Directory_Bak NVARCHAR(100),@Directory_Dat NVARCHAR(100),@Directory_Log NVARCHAR(100),@Directory_Stand BIT) AS BEGINDECLARE @SQL NVARCHAR(MAX)='RESTORE DATABASE ['+@dbname+'] FROM DISK=N'''+@Directory_Bak+''+@dbname+'.bak'' WITH FILE= 1,MOVE N'''+@dbname+''' TO N'''+@Directory_Dat+@dbname+'.mdf'',MOVE N'''+@dbname+'_log'' TO N'''+@Directory_Log+@dbname+'.ldf'',NOUNLOAD, REPLACE, STATS=10'--Standby CodeIF ISNULL(@Directory_Bak,'')<>''SET @SQL=@SQL+',STANDBY=N'''+@Directory_Stand+'ROLLBACK_UNDO_'+@dbname+'.bak'''EXEC master..sp_executesql @SQLENDGO