从存储过程还原SQL Server数据库的动态脚本
使用动态SQL脚本创建集中化,通用且可重复使用的存储过程,该脚本可以使用大量参数来还原数据库,这是更广泛的维护计划的一部分
过程
还原数据库的过程可以从SSMS编写脚本。当将其保存到存储过程中时,可以从其他已处理或服务器中调用它,并且作为联合维护计划的一部分特别有用。
在下面,我们创建了两个脚本。
使用简单的脚本,使用从SSMS生成的代码并替换存储过程的内容。
使用通用脚本,可以使用变量来还原单个数据库,这意味着您可以重复使用它。
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
可重复使用的脚本
该脚本使用许多参数来使它可以从其他地方调用,因此可以重复使用并在必要时调用跨服务器。
- @dbname-您要调用的数据库名称
- @Directory_Bak-存储备份的文件夹
- @Directory_Dat-最好将日志文件和数据库文件保存在不同的磁盘上,因此这是您要将其存储在的目录
- @Directory_Log-如上所述,为您的日志文件使用单独的目录
- @Directory_Stand-这是考虑到日志传送而开发的,因此可用于从主数据库到报告数据库的还原
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