Dynamický skript pro obnovení databáze serveru SQL z uložené procedury
Vytvořte centralizovanou, obecnou a opakovaně použitelnou uloženou proceduru pomocí dynamického skriptu SQL, který může obnovit databáze pomocí řady parametrů jako součást širšího plánu údržby
Proces
Proces obnovy databáze lze skriptovat z SSMS. Když je toto uloženo do uložené procedury, může být voláno z jiných zpracovaných nebo serverů a je zvláště užitečné jako součást spojeného plánu údržby.
Níže jsme vytvořili dva skripty.
Pomocí jednoduchého skriptu použijte kód vygenerovaný z SSMS a nahraďte obsah uložené procedury.
S obecným skriptem lze jednotlivé databáze obnovit pomocí proměnných, což znamená, že je můžete znovu použít.
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
Znovu použitelný skript
Tento skript používá řadu parametrů k tomu, aby jej bylo možné volat odjinud, takže jej lze v případě potřeby znovu použít a zavolat mezi servery.
- @dbname - název databáze, kterou chcete volat
- @Directory_Bak - složka, kde jsou uloženy zálohy
- @Directory_Dat - nejlepší je uchovávat soubory protokolu a databázové soubory na různých discích, takže do tohoto adresáře jej chcete uložit
- @Directory_Log - Jak je uvedeno výše, použijte pro svůj soubor protokolu samostatný adresář
- @Directory_Stand - Toto bylo vyvinuto s ohledem na zasílání logů, takže jej lze použít k obnovení z hlavní databáze do databáze hlášení
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