Uno script dinamico per ripristinare i database di SQL da una stored procedure
Creare una stored procedure centralizzata, generica e riutilizzabile utilizzando uno script di SQL dinamico in grado di ripristinare i database utilizzando una serie di parametri come parte di un piano di manutenzione più ampio
Processi

Il processo di ripristino di un database può essere eseguito tramite script da SSMS. Quando questo viene salvato in una Stored Procedure, può essere chiamato da altri elaborati o server ed è particolarmente utile come parte di un piano di manutenzione congiunto.
Di seguito abbiamo creato due script.
Con il semplice script utilizza il codice generato da SSMS e sostituisci il contenuto della Stored Procedure.
Con lo script generico, è possibile ripristinare singoli database utilizzando variabili, il che significa che è possibile riutilizzarlo.
Script Semplice
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
Script riutilizzabile
Questo script utilizza una serie di parametri per consentirne la chiamata d'altrove, quindi può essere riutilizzato e chiamato cross server se necessario.
- @dbname - Nome del database che si desidera venga chiamato
- @Directory_Bak - Cartella in cui sono archiviati i backup
- @Directory_Dat - È meglio conservare i file di registro e i file di database su dischi diversi, quindi questa è la directory in cui vuoi salvarli
- @Directory_Log - Come sopra, usa una directory separata per il tuo file di registro
- @Directory_Stand - Questo è stato sviluppato pensando al log shipping, quindi può essere utilizzato per eseguire un ripristino dal database principale al database di reporting
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