Un script dynamique pour restaurer la base de données SQL Server à partir d'une procédure stockée
Créez une procédure stockée centralisée, générique et réutilisable à l'aide d'un script SQL dynamique capable de restaurer des bases de données à l'aide d'un certain nombre de paramètres dans le cadre d'un plan de maintenance plus large
Traiter
Le processus de restauration d'une base de données peut être scripté à partir de SSMS. Lorsqu'elle est enregistrée dans une procédure stockée, elle peut être appelée à partir d'autres serveurs traités ou, et est particulièrement utile dans le cadre d'un plan de maintenance joint.
Ci-dessous, nous avons créé deux scripts.
Avec le script simple, utilisez le code généré à partir de SSMS et remplacez le contenu de la procédure stockée.
Avec le script générique, des bases de données uniques peuvent être restaurées à l'aide de variables, ce qui signifie que vous pouvez les réutiliser.
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
Script réutilisable
Ce script utilise un certain nombre de paramètres pour lui permettre d'être appelé ailleurs, il peut donc être réutilisé et appelé cross-serveur si nécessaire.
- @dbname - Nom de la base de données que vous souhaitez appeler
- @Directory_Bak - Dossier dans lequel les sauvegardes sont stockées
- @Directory_Dat - Il est préférable de conserver les fichiers journaux et les fichiers de base de données sur différents disques, c'est donc le répertoire sur lequel vous souhaitez les stocker
- @Directory_Log - Comme ci-dessus, utilisez un répertoire séparé pour votre fichier journal
- @Directory_Stand - Ceci a été développé avec l'envoi de journaux à l'esprit, donc cela peut être utilisé pour effectuer une restauration de votre base de données principale vers la base de données de rapports
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