Um script dinâmico para restaurar o banco de dados SQL Server de um procedimento armazenado
Crie um procedimento armazenado centralizado, genérico e reutilizável usando script SQL dinâmico que pode restaurar bancos de dados usando vários parâmetros como parte de um plano de manutenção mais amplo
Processar
O processo de restauração de um banco de dados pode ter um script do SSMS. Quando ele é salvo em um procedimento armazenado, ele pode ser chamado de outros processados ou servidores e é particularmente útil como parte de um plano de manutenção unido.
Abaixo, criamos dois scripts.
Com o script simples use o código gerado a partir do SSMS e substitua o conteúdo do Stored Procedure.
Com o script genérico, bancos de dados únicos podem ser restaurados usando variáveis, o que significa que você pode reutilizá-los.
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 reutilizável
Este script usa vários parâmetros para permitir que ele seja chamado de outro lugar, portanto, pode ser reutilizado e chamado de servidor cruzado, se necessário.
- @dbname - nome do banco de dados que você deseja chamar
- @Directory_Bak - Pasta onde os backups são armazenados
- @Directory_Dat - É melhor manter os arquivos de log e arquivos de banco de dados em discos diferentes, portanto, este é o diretório em que você deseja armazená-lo
- @Directory_Log - Como acima, use um diretório separado para o seu arquivo de log
- @Directory_Stand - Ele foi desenvolvido com o envio de log em mente, portanto, pode ser usado para fazer uma restauração de seu banco de dados principal para o banco de dados de relatórios
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