须事先准备一个工具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. ubuntu下使用锐捷校园网

    前言           以下内容是个人学习之后的感悟,转载请注明出处~ 1.首先下载锐捷Linux版本,然后解压缩后,有个rjsupplicant.sh这个脚本文件,于是按照README做了,终端中 ...

  2. Coding WebIDE 开放支持第三方 Git 仓库

    为了给开发者提供更多便捷的开发方式,Coding.net 现正式宣布 WebIDE 开放啦 ! 用户可以自由选择各大代码托管平台,推送代码到其它家代码仓库啦,同时新版的 WebIDE 还有如下特性: ...

  3. httpd基础

    hpptd http服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS .asp tomcat .jsp jetty 开源的servlet容 ...

  4. 图数据库初探之Neo4j

    图数据库初试之Neo4j 自从进入了移动互联网时代,各种新事物出现的速度都好像坐上了宇宙飞船,几乎隔几天一个新概念.就拿数据库而言,什么Oracle.DB2.SQL Server.MySQL,这些你都 ...

  5. CodeForces 363D 【二分+贪心】

    思路: 一开始是没有办法贪心的,但是答案是可以二分的,因为窝能买k辆车的话,窝就一定能买k-1辆车:而且我最好就是拿手上钱较多的那些人去买价格便宜的车,这样肯定是能买到最多的车,而且花的少,因为对于要 ...

  6. OPENGL_变换与坐标系

    参考:http://blog.csdn.net/kandyer/article/details/12449973 坐标系 世界坐标系:绝对坐标 物体坐标系:以物体自身为原点的坐标系 摄像机坐标系:以摄 ...

  7. Apollo应用相关JVM配置参数

    -Dapollo_profile=github,auth-Ddev_meta=http://localhost:8080/-Dserver.port=8070-Dspring.datasource.u ...

  8. iOS 7:漫谈#define 宏定义

           #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开 ...

  9. Ibatis相关

    XML中的#和$的区别 http://shenzhenchufa.blog.51cto.com/730213/254561 poolMaximumActiveConnections和poolMaxim ...

  10. 大数加法 HDU 1002

    #include <iostream> #include <cstring> #include <string> #include <cstdio> # ...