数据的自动备份和上传

一直在做一个集团化项目,各个子公司的数据要每天上传到集团服务器上,于是就写了一个自动备份程序并通过FTP上传(或网络映射)到服务上的存储过程,以备用也希望对大家有所帮助.代码如下:

 

数据的自动备份和上传数据的自动备份和上传----------------------------------------------- 数据库备份和上传到FTb服务器----------------------------------------
CREATE  proc Proc_BackUp
as
begin
declare @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     
 end
else
 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
  

 

存储过程好了之后,在作业中调用即可. 

本人水平有限,请各位拍砖.希望对大家有所帮助!下文继续数据库的还原操作.

 

posted @ 2010-08-21 09:23  幽境仼孓  阅读(544)  评论(0编辑  收藏  举报