SQL远程恢复
时间:2022-03-14 02:23
原文:
-- ============================================= -- Author: dcrenl -- Create date: 2013-9-5 14:08:35 -- Description: WEB服务器远程恢复数据库,远程恢复和远程备份的思路是一样的。 --不过恢复的时候有个释放连接的问题,所以多加了一个释放连接的存储过程。 --本来可以整合到一个里面但是考虑到其它地方也会用到释放连接所以把它单独拿出来了。 -- ============================================= ALTER PROCEDURE [dbo].[RemoteRestore] @DataDisk nvarchar(max),--需要在数据库服务器上映射的盘符 @WEBAddr nvarchar(max),--WEB服务器地址 @WEBDisk nvarchar(max),--WEB服务器共享目录(例如:D$ 或 C$\Windows) @Password nvarchar(max),--WEB服务器密码 @UserName nvarchar(max),--WEB服务器用户名 @DataName nvarchar(max),--需要恢复的数据库名 @BackName nvarchar(max)--需要恢复的数据库名 AS BEGIN SET NOCOUNT ON; --打开高级设置 exec sp_configure ‘show advanced options‘,1 reconfigure --开启xp_cmdshell exec sp_configure ‘xp_cmdshell‘,1 reconfigure --将WEB服务器路径映射到数据库服务器 exec (‘master..xp_cmdshell ‘‘net use ‘ + @DataDisk + ‘: \\‘ + @WEBAddr + ‘\‘ + @WEBDisk + ‘ "‘ + @Password + ‘" /user:‘ + @WEBAddr + ‘\‘ + @UserName + ‘‘‘‘) --开始备份并复制到WEB服务器的映射路径 declare @DataBaseName varchar(50) set @DataBaseName = ‘KF_Reg_‘ + @BackName exec p_killspid @DataBaseName exec (‘RESTORE DATABASE [‘ + @DataName + ‘] FROM DISK = N‘‘‘+@DataDisk+‘:\‘ +@BackName+‘.bak‘‘ WITH REPLACE‘) --关闭映射路径 exec (‘master..xp_cmdshell ‘‘net use ‘ + @DataDisk + ‘: /delete‘‘‘) --关闭xp_cmdshell exec sp_configure ‘xp_cmdshell‘,0 reconfigure --关闭高级设置 exec sp_configure ‘show advanced options‘,0 reconfigure END ------------------------------------------------------------------------------------------------- --断开所有用户连接的存储过和 ALTER proc [dbo].[p_killspid] (@dbname varchar(100)) as begin declare @sql nvarchar(500) declare @spid int set @sql=‘declare getspid cursor for select spid from master.sys.sysprocesses where dbid=db_id(‘‘‘+@dbname+‘‘‘)‘ exec (@sql) open getspid fetch next from getspid into @spid while @@fetch_status<>-1 begin exec(‘kill ‘+@spid) fetch next from getspid into @spid end close getspid deallocate getspid end