Script para restaurar bases de datos SQL con procedimiento almacenado
Proceso
El proceso de restauración de una base de datos puede programarse desde SSMS. Cuando esto se guarda en un procedimiento almacenado, puede ser llamado desde otros procesos o servidores, y es particularmente útil como parte de un plan de mantenimiento conjunto.
A continuación hemos creado dos scripts.
Con el script simple se utiliza el código generado desde SSMS y se reemplaza el contenido del procedimiento almacenado.
Con el script genérico, se pueden restaurar bases de datos individuales utilizando variables, lo que significa que se puede reutilizar.
Script simple
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 reutilizable
Este script utiliza una serie de parámetros para permitir que sea llamado desde otro lugar, por lo que puede ser reutilizado y llamado a través del servidor si es necesario.
@dbname - Nombre de la base de datos que desea llamar
@Directory_Bak - Carpeta donde se almacenan las copias de seguridad
@Directory_Dat - Es mejor mantener los archivos de registro y los archivos de base de datos en discos diferentes, por lo que este es el directorio en el que quieres almacenarlos.
@Directorio_Log - Como arriba, usa un directorio separado para tu archivo de registro
@Directory_Stand - Esto fue desarrollado con el envío de registros en mente, por lo que se puede utilizar para hacer una restauración de la base de datos principal a la base de datos de informes.
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