一直在做一个集团化项目,各个子公司的数据要每天上传到集团服务器上,于是就写了一个自动备份程序并通过FTP上传(或网络映射)到服务上的存储过程,以备用也希望对大家有所帮助.代码如下:
数据的自动备份和上传数据的自动备份和上传----------------------------------------------- 数据库备份和上传到FTb服务器----------------------------------------CREATE proc Proc_BackUpasbegindeclare @yyyymmdd char(8)declare @upyyyymmdd char(8)declare @cmd1 varchar(200)--压缩备份文件,并删除原有文件declare @cmd2 varchar(200)declare @cmd3 varchar(200)--删除一个月前的数据文件declare @sFolder nvarchar(1000)--文件夹,存放备份后的压缩文件,即备份路径declare @sCommandText varchar(255)
declare @FileName varchar(50)declare @backName varchar(50)declare @CopyPath varchar(200)--临时文件夹
set @backName=N'数据库备份'set @sFolder='e:\backup' --要判断的文件夹 set @yyyymmdd=convert(varchar(8),getdate(),112)--当前日期set @upyyyymmdd=convert(varchar(8),dateadd(m,-2,getdate()),112)--一个月前的日期create table #temp (a int,b int,c int)--临时表
insert #temp exec master..xp_fileexist @sFolder if not exists(select * from #temp where b=1) begin set @sCommandText='mkdir '+@sFolder exec xp_cmdshell @sCommandText end drop table #temp
if(substring(@upyyyymmdd,7,2)='02')--每月2号进行完全备份 begin set @FileName=@sFolder+'\filiale.bak' backup log 数据库 with no_log--截断日志文件 dbcc shrinkdatabase('数据库')--收缩数据库 backup database 数据库 to disk=@FileName --完成数据库备份 with INIT , NOUNLOAD , NAME = @backName, NOSKIP , STATS = 10, NOFORMAT set @cmd1='"C:\Program Files\WinRAR\RAR.exe" a -df -ep1 e:\backup\filiale_'+@yyyymmdd+'_0.rar e:\backup\filiale.bak' set @cmd2='e:\backup\filiale_'+@yyyymmdd+'_0.rar'
set @cmd2='copy E:\backup\filiale_'+@yyyymmdd+'_0.rar Z:\filiale.rar'--通过网络映射来实现使用 set @cmd3='del e:\backup\filiale_'+@upyyyymmdd+'*'--删除一个月前的数据文件 exec master..xp_cmdshell @cmd3 endelse begin set @FileName=@sFolder+'\filiale.cha' backup database 数据库 to disk=@FileName --完成数据库差异备份 with DIFFERENTIAL,FORMAT set @cmd1='"C:\Program Files\WinRAR\RAR.exe" a -df -ep1 e:\backup\filiale_'+@yyyymmdd+'_1.rar e:\backup\filiale.cha' set @cmd2='e:\backup\filiale_'+@yyyymmdd+'_1.rar'
set @cmd2='copy E:\backup\filiale_'+@yyyymmdd+'_1.rar Z:\filiale.rar'--通过网络映射来实现使用 end exec master..xp_cmdshell @cmd1 --将备份文件压缩 set @CopyPath='copy '+@cmd2+' e:\~temp\filiale.rar'--------------------- ExEc xp_cmdshell 'mkdir e:\~temp' exec master..xp_cmdshell @CopyPath set @sCommandText='echo open FTP服务器IP >'+'e:\a.txt' --指定ftp服务器--------------------- exec master..xp_cmdshell @sCommandText set @sCommandText='echo 登录名 >>'+'e:\a.txt'--登录名-------------------------------- exec master..xp_cmdshell @sCommandText set @sCommandText='echo 密码 >>'+'e:\a.txt'--登录密码------------------------ exec master..xp_cmdshell @sCommandText set @sCommandText='echo lcd e:\~temp >>'+'e:\a.txt'--本地路径(备份文件所在的目录) exec master..xp_cmdshell @sCommandText set @sCommandText='echo bin >>'+'e:\a.txt'--变成二进制传送,提高速度 exec master..xp_cmdshell @sCommandText set @sCommandText='echo put e:\~temp\filiale.rar >>'+'e:\a.txt'--传送到ftp服务器目录-------------------- exec master..xp_cmdshell @sCommandText exec master..xp_cmdshell 'echo bye' --结束 exec master..xp_cmdshell 'echo quit '--退出
set @sCommandText='ftp -s:e:\a.txt' exec master..xp_cmdshell @sCommandText--执行生成的批处理文件 exec master..xp_cmdshell 'del e:\a.txt'--删除临时文件 exec master..xp_cmdshell 'del e:\~temp\*.rar'--删除临时文件夹 exec master..xp_cmdshell 'rd e:\~temp\'--删除临时文件夹
exec xp_cmdshell @cmd1 exec xp_cmdshell 'net use z://192.168.2.5/databak "ytsoft" /user:192,168,2.5\admin'--建立网络映射 exec xp_cmdshell 'del Z:\gahs.rar'--先删除服务器上的文件 exec xp_cmdshell @cmd2--复制到目标服务器上 exec xp_cmdshell 'net use z: /delete'--删除网络映射
end
GO
存储过程好了之后,在作业中调用即可.
本人水平有限,请各位拍砖.希望对大家有所帮助!下文继续数据库的还原操作.