原文:SQL远程备份
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: dcrenl
-- Create date: 2013-9-5 9:54:46
-- Description: WEB服务器远程备份数据库,
--此方法需要打开WEB服务器的共享功能.
--验证方法同一局域网其它机器里在运行里输入 \\IP\C$ 要求输入用户名和密码,如果可以访问此方法有效
--
--异地备份还有很多种方法
--1.将数据库备份完之后在数据库服务上创建一个库,添加表,创建一个Image类型字段,
--
然后使用sp_textcopy把备份文件写入数据库,再从WEB服务器将备份文件读取出来,不过此方法读取出来的备份文件有可能会损坏
然后使用sp_textcopy把备份文件写入数据库,再从WEB服务器将备份文件读取出来,不过此方法读取出来的备份文件有可能会损坏
--2.在WEB服务器安装SQL Server 使用SQLDMO(Interop.SQLDMO.dll)或
--Microsoft.SqlServer.ConnectionInfo.dll 、
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
--(以上两个DLL文件位置:Program Files\Microsoft SQL
Server\100\SDK\Assemblies)
Server\100\SDK\Assemblies)
--生成数据库表、存储过程和函数等脚本,然后在WEB服务上的SQL Server上创建数据库,
--使用生成的脚本创建表等,然后将数据Insert到WEB服务器上的数据库进行备份
-- =============================================
CREATE PROCEDURE [dbo].[RemoteBack]
@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)--需要备份的数据库名
AS
BEGIN
SET NOCOUNT ON;
--设置日期时间串
DECLARE @DateTime DateTime
set @DateTime = getdate()
DECLARE @FileTime nvarchar(max)
set @FileTime = convert(nvarchar(50), year(@DateTime)) +
right(cast(month(@DateTime)+100 as varchar),2) +
right(cast(day(@DateTime)+100 as varchar),2) +
right(cast(DateName(hour,GetDate())+100 as varchar),2) +
right(cast(DateName(minute,GetDate())+100 as varchar),2) +
right(cast(DateName(second,GetDate())+100 as varchar),2)
right(cast(month(@DateTime)+100 as varchar),2) +
right(cast(day(@DateTime)+100 as varchar),2) +
right(cast(DateName(hour,GetDate())+100 as varchar),2) +
right(cast(DateName(minute,GetDate())+100 as varchar),2) +
right(cast(DateName(second,GetDate())+100 as varchar),2)
--打开高级设置
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 + '''')
@WEBAddr + '\' + @WEBDisk + ' "' + @Password + '" /user:' +
@WEBAddr + '\' + @UserName + '''')
--开始备份并复制到WEB服务器映射到SQL服务上的路径
exec('backup database ' + @DataName + ' to
disk='''+@DataDisk+':\' + @DataName +'_'+ @FileTime +'.bak'' with
init')
disk='''+@DataDisk+':\' + @DataName +'_'+ @FileTime +'.bak'' with
init')
--关闭映射路径
exec ('master..xp_cmdshell ''net use ' + @DataDisk + ':
/delete''')
/delete''')
--关闭xp_cmdshell
exec sp_configure 'xp_cmdshell',0
reconfigure
--关闭高级设置
exec sp_configure 'show advanced options',0
reconfigure
END