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

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

Create PROCEDURE [dbo].[BackUpDB7z]
@dbname sysname --数据库名 AS declare @backupfile nvarchar() --本地备份文件名
declare @backuplogfile nvarchar() --本地日志备份文件名
declare @archivefile nvarchar() --本地压缩文件名
declare @archivelogfile nvarchar() --本地压缩文件名
declare @target_localpath nvarchar() --本地备份路径
declare @target_backupfile nvarchar() --本地备份文件完整路径
declare @target_backuplogfile nvarchar() --本地备份日志文件完整路径 declare @target_archivefile nvarchar() --本地压缩文件完整路径
declare @target_archivelogfile nvarchar() --本地日志压缩文件完整路径 declare @descr nvarchar() --备份文件描述
declare @date datetime
declare @date_str varchar() --日期时间字符串 declare @cmd nvarchar() --要执行的命令
declare @log_file nvarchar() -- declare @cmd_7z nvarchar()
declare @7z_opt nvarchar() declare @cmd_tool nvarchar()='C:\curl\curl -T'
declare @remotepath nvarchar()='' --远程备份路径
declare @ftp_user nvarchar()=''--ftp帐号
declare @ftp_pw nvarchar()=''--ftp密码
declare @ftp_opt nvarchar()='ftp://' declare @localpath nvarchar()='' --本地备份路径 --参数设置
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(), @date, )
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,)<>'\')
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, ,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+', ,TRUNCATEONLY);
' set @sql2008='
ALTER DATABASE '+@DataBase+' SET RECOVERY SIMPLE;
DBCC SHRINKDATABASE ('+@DataBase+', ,TRUNCATEONLY);
ALTER DATABASE '+@DataBase+' SET RECOVERY FULL;
'
--print(@sql);
exec(@sql2008);
END GO

sqlserver数据库备份方法的更多相关文章

  1. SQLSERVER数据库备份操作和还原操作做了什么

    SQLSERVER数据库备份操作和还原操作做了什么 看了这篇文章:还原/备份时做了些什么 自己也测试了一下,下面说的错误日志指的是SQLSERVER ERRORLOG 一般在C:\Program Fi ...

  2. [SQLServer]NetCore中将SQLServer数据库备份为Sql脚本

    NetCore中将SQLServer数据库备份为Sql脚本 描述: 最近写项目收到了一个需求, 就是将SQL Server数据库备份为Sql脚本, 如果是My Sql之类的还好说, 但是在网上搜了一大 ...

  3. 最简便的MySql数据库备份方法

    http://www.kankanews.com/ICkengine/archives/194.shtml 使用MYSQL进行数据库备份,又很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但 ...

  4. 将服务器上的SqlServer数据库备份到本地

    如何将服务器上的SqlServer数据库备份到本地电脑 http://bbs.csdn.net/topics/370051204 有A数据库服务器,B本机:    我现在想通过在B机器上通过代码调用S ...

  5. 基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题

    基于PL/SQL的数据库备份方法 PL/SQL Developer是Oracle 数据库中用于导入或导出数据库的主要工具,本文主要介绍了利用PL/SQL Developer导入和导出数据库的过程,并对 ...

  6. SQLSERVER 数据库备份脚本-支持多库备份

    原文:SQLSERVER 数据库备份脚本-支持多库备份 <pre name="code" class="sql">--变量定义 DECLARE @b ...

  7. 批处理(bat)实现SQLServer数据库备份与还原

    原文:批处理(bat)实现SQLServer数据库备份与还原 备份数据库.bat @echo off set path=%path%;C:\Program Files (x86)\Microsoft ...

  8. 较详细的sqlserver数据库备份、恢复(转)

    C#实现SQL数据库备份与恢复 有两种方法,都是保存为.bak文件.一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现: .通过执行Sql语句来实现 注意,用Sq ...

  9. 【转载】Sqlserver数据库备份的几种方式

    在实际的数据库Sqlserver的运维的过程中,很多时候我们需要做到数据的备份操作,可以做到定时备份,也可以进行手动数据库备份.在实际的过程中,有时候因业务需要备份出完整数据库,而有时候又因为实际业务 ...

随机推荐

  1. nohup command > myout.file 2>&1 &

    nohup command > myout.file 2>&1 &

  2. themeforest 免费模板

    http://www.im286.com/thread-9550365-1-1.html 官网:http://themeforest.net/item/elena-responsive-email-t ...

  3. 2、css的存在形式及优先级

    一.优先级 简单可以理解为就近原则: <html lang="en"> <head> <meta charset="UTF-8"& ...

  4. 清理win10系统c盘

    本人C盘是128G SSD硬盘,Win10系统盘和一些常用的程序都装在这个盘(特大程序除外),目的是为了使用这些程序时提高响应速度.但是本人电脑使用1年,突然发现C盘以占用近70G的空间,实在是吓蒙撒 ...

  5. [工作笔记]JDK版本不同导致的SSL异常

    前言 遇到这个问题得说一下笔者的开发环境,笔者所在公司,平时开发用的web容器是jboss,使用的JDK是oracle的JDK,但是测试和生产环境用的是WAS,JDK用的是IBM的JDK,由于项目的不 ...

  6. java泛型基础、子类泛型不能转换成父类泛型--未完待续

    参考http://how2j.cn/k/generic/generic-generic/373.html 1.使用泛型的好处:泛型的用法是在容器后面添加<Type>Type可以是类,抽象类 ...

  7. 201621123016 《Java程序设计》第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至 ...

  8. CodeForces 382C【模拟】

    活生生打成了大模拟... #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsig ...

  9. POJ3020【二分匹配】

    思路: ---说给自己 一开始想的是从1-h*w标记整幅图,建图是星号和 {他,与他相连的星号} 建边,肯定要去匹配"*"啊,所以空格一定不会去造,然后就理解成了最小点覆盖,然而对 ...

  10. 混用ngui和ugui渲染顺序问题

    http://blog.csdn.net/xtxy/article/details/38332801 为NGUI panel 添加 sorting layer 接着上一篇文章的问题,看到了老外做的一个 ...