码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver数据库备份方法

时间:2016-04-08 14:35:04      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

须事先准备一个工具curl,把它放在c盘。然后,在数据库所在服务器安装7z。最后把这2个存储过程执行,在sqlserver的代理中新建作业,即可实现备份操作。

 技术分享

 

--备份指定数据库到本地和远程指定位置(7-zip压缩)

Create PROCEDURE [dbo].[BackUpDB7z]
@dbname sysname --数据库名

AS

declare @backupfile nvarchar(200) --本地备份文件名
declare @backuplogfile nvarchar(200) --本地日志备份文件名
declare @archivefile nvarchar(200) --本地压缩文件名
declare @archivelogfile nvarchar(200) --本地压缩文件名
declare @target_localpath nvarchar(800) --本地备份路径
declare @target_backupfile nvarchar(1000) --本地备份文件完整路径
declare @target_backuplogfile nvarchar(1000) --本地备份日志文件完整路径

declare @target_archivefile nvarchar(1000) --本地压缩文件完整路径
declare @target_archivelogfile nvarchar(1000) --本地日志压缩文件完整路径

declare @descr nvarchar(100) --备份文件描述
declare @date datetime
declare @date_str varchar(100) --日期时间字符串

declare @cmd nvarchar(4000) --要执行的命令
declare @log_file nvarchar(200) --

declare @cmd_7z nvarchar(200)
declare @7z_opt nvarchar(1000)

declare @cmd_tool nvarchar(200)=C:\curl\curl -T
declare @remotepath nvarchar(800)=‘‘ --远程备份路径
declare @ftp_user nvarchar(300)=‘‘--ftp帐号
declare @ftp_pw nvarchar(200)=‘‘--ftp密码
declare @ftp_opt nvarchar(1000)=ftp://


declare @localpath nvarchar(800)=‘‘ --本地备份路径

--参数设置
select @log_file=d:\shellcmd_log.txt
select @cmd_7z=7z 
select @7z_opt=a -t7z -mx=9 -mmt=on

 

select @date=getdate()
select @descr=@dbname+cast(year(@date) as nvarchar)++cast(month(@date) as nvarchar)++cast(day(@date) as nvarchar)+日完全备份
select @backupfile=@dbname+.bak
select @backuplogfile=@dbname+.Log.bak

select @date_str=convert(varchar(100), @date, 120)
select @date_str=REPLACE(@date_str,-,‘‘)
select @date_str=REPLACE(@date_str, ,_)
select @date_str=REPLACE(@date_str,:,‘‘)

select @archivefile=@dbname+_+@date_str+.7z
select @archivelogfile=@dbname+_+@date_str+.Log.7z

if (@localpath<>‘‘ and right(@localpath,1)<>\‘)
select @target_localpath=@localpath+\‘
else
select @target_localpath=@localpath

select @target_backupfile=@target_localpath+@backupfile
select @target_backuplogfile=@target_localpath+@backuplogfile
select @target_archivefile=@target_localpath+@archivefile
select @target_archivelogfile=@target_localpath+@archivelogfile

--收缩数据库
--dump transaction @dbname with no_log
--DBCC SHRINKDATABASE (@dbname, 0,TRUNCATEONLY)

--备份数据库
backup database @dbname to disk=@target_backupfile with FORMAT , description=@descr
--备份日志
backup log @dbname to disk=@target_backuplogfile with FORMAT

exec [ClearDbLog] @dbname

--压缩数据库
select @cmd=@cmd_7z+ +@7z_opt+ +@target_archivefile+  +@target_backupfile
--执行命令
exec xp_cmdshell @cmd

--压缩日志
select @cmd=@cmd_7z+ +@7z_opt+ +@target_archivelogfile+  +@target_backuplogfile
--执行命令
exec xp_cmdshell @cmd


--传送压缩文件到远程服务器
if @remotepath<>‘‘
begin
select @cmd=@cmd_tool+ +@target_archivefile+ -u +@ftp_user+:+@ftp_pw+ +@ftp_opt+‘‘+@remotepath
--print(@cmd)
--执行命令
exec xp_cmdshell @cmd

select @cmd=@cmd_tool+ +@target_archivelogfile+ -u +@ftp_user+:+@ftp_pw+ +@ftp_opt+‘‘+@remotepath
--print(@cmd)
--执行命令
exec xp_cmdshell @cmd
end

--删除本地备份bak文件
select @cmd=del +@target_backupfile
--print(@cmd)
--执行命令
exec xp_cmdshell @cmd

select @cmd=del +@target_backuplogfile
--print(@cmd)
--执行命令
exec xp_cmdshell @cmd


--删除本地备份7z文件
select @cmd=del +@target_archivefile
--print(@cmd)
--执行命令
exec xp_cmdshell @cmd

select @cmd=del +@target_archivelogfile
--print(@cmd)
--执行命令
exec xp_cmdshell @cmd

 

 

 

--清除数据库日志

CREATE PROCEDURE [dbo].[ClearDbLog] 
@DataBase sysname 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    
    declare @sql2005 varchar(max)
    declare @sql2008 varchar(max)
    
    set @sql2005=    DUMP TRANSACTION +@DataBase+ WITH NO_LOG;
    DBCC SHRINKDATABASE (+@DataBase+, 0,TRUNCATEONLY);
        
    set @sql2008=    ALTER DATABASE +@DataBase+ SET RECOVERY SIMPLE;
    DBCC SHRINKDATABASE (+@DataBase+, 0,TRUNCATEONLY);
    ALTER DATABASE +@DataBase+ SET RECOVERY FULL;
        --print(@sql);
    exec(@sql2008);
END






GO

 

sqlserver数据库备份方法

标签:

原文地址:http://www.cnblogs.com/wangshishuifeng2016/p/5367756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!