Dynamiczny skrypt do przywracania bazy danych SQL Server z procedury składowanej
Utwórz scentralizowaną, ogólną i wielokrotnego użytku procedurę składowaną za pomocą dynamicznego skryptu SQL, który może przywracać bazy danych przy użyciu wielu parametrów w ramach szerszego planu konserwacji
Proces
Proces przywracania bazy danych można obsługiwać skryptami z poziomu programu SSMS. Gdy jest to zapisane w procedurze składowanej, może być wywoływane z innych przetwarzanych lub serwerów i jest szczególnie przydatne jako część połączonego planu konserwacji.
Poniżej stworzyliśmy dwa skrypty.
Za pomocą prostego skryptu użyj kodu wygenerowanego z SSMS i zastąp zawartość procedury składowanej.
Za pomocą ogólnego skryptu można przywrócić pojedyncze bazy danych za pomocą zmiennych, co oznacza, że można ich użyć ponownie.
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
Skrypt wielokrotnego użytku
Ten skrypt używa szeregu parametrów, aby umożliwić wywołanie go z innego miejsca, dzięki czemu może być ponownie użyty i w razie potrzeby nazywany cross server.
- @dbname - nazwa bazy danych, którą chcesz nazwać
- @Directory_Bak - folder, w którym przechowywane są kopie zapasowe
- @Directory_Dat - Najlepiej przechowywać pliki dziennika i pliki baz danych na różnych dyskach, więc jest to katalog, w którym chcesz je przechowywać
- @Directory_Log - Jak wyżej, użyj oddzielnego katalogu dla pliku dziennika
- @Directory_Stand - został opracowany z myślą o wysyłaniu dzienników, więc można go użyć do przywrócenia z głównej bazy danych do bazy danych raportowania
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