sqlserver数据库备份方法
须事先准备一个工具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数据库备份方法的更多相关文章
- SQLSERVER数据库备份操作和还原操作做了什么
SQLSERVER数据库备份操作和还原操作做了什么 看了这篇文章:还原/备份时做了些什么 自己也测试了一下,下面说的错误日志指的是SQLSERVER ERRORLOG 一般在C:\Program Fi ...
- [SQLServer]NetCore中将SQLServer数据库备份为Sql脚本
NetCore中将SQLServer数据库备份为Sql脚本 描述: 最近写项目收到了一个需求, 就是将SQL Server数据库备份为Sql脚本, 如果是My Sql之类的还好说, 但是在网上搜了一大 ...
- 最简便的MySql数据库备份方法
http://www.kankanews.com/ICkengine/archives/194.shtml 使用MYSQL进行数据库备份,又很正规的数据库备份方法,同其他的数据库服务器有相同的概念,但 ...
- 将服务器上的SqlServer数据库备份到本地
如何将服务器上的SqlServer数据库备份到本地电脑 http://bbs.csdn.net/topics/370051204 有A数据库服务器,B本机: 我现在想通过在B机器上通过代码调用S ...
- 基于PLSQL的数据库备份方法及如何解决导出clob和blob类型数据报错的问题
基于PL/SQL的数据库备份方法 PL/SQL Developer是Oracle 数据库中用于导入或导出数据库的主要工具,本文主要介绍了利用PL/SQL Developer导入和导出数据库的过程,并对 ...
- SQLSERVER 数据库备份脚本-支持多库备份
原文:SQLSERVER 数据库备份脚本-支持多库备份 <pre name="code" class="sql">--变量定义 DECLARE @b ...
- 批处理(bat)实现SQLServer数据库备份与还原
原文:批处理(bat)实现SQLServer数据库备份与还原 备份数据库.bat @echo off set path=%path%;C:\Program Files (x86)\Microsoft ...
- 较详细的sqlserver数据库备份、恢复(转)
C#实现SQL数据库备份与恢复 有两种方法,都是保存为.bak文件.一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现: .通过执行Sql语句来实现 注意,用Sq ...
- 【转载】Sqlserver数据库备份的几种方式
在实际的数据库Sqlserver的运维的过程中,很多时候我们需要做到数据的备份操作,可以做到定时备份,也可以进行手动数据库备份.在实际的过程中,有时候因业务需要备份出完整数据库,而有时候又因为实际业务 ...
随机推荐
- tetrahedron
题意: 求解一个四面体的内切球. 解法: 首先假设内切球球心为$(x0,x1,x2)$,可以用$r = \frac{3V}{S_1+S_2+S_3+S_4}$得出半径, 这样对于四个平面列出三个方程, ...
- Zeppelin推荐
1.官网 Zeppelin官网,我们可以通过官网了解并获取Zeppelin,Zeppelin既有编译好可以直接运行的文件:也有源码文件. 官网下载网址 http://zeppelin.apache.o ...
- sql之视图、触发器、函数、存储过程、事务
视图 # 视图也是一张表,但在data文件里只有表结构,没有表数据 # 不建议使用,扩展性差,程序需改变时,依赖的视图也要改变 # 视图牵涉到多张表时,视图中的记录不能修改. create view ...
- [CVE-2017-8464]Microsoft Windows远程命令执行漏洞复现
版权声明:本文为博主的原创文章,未经博主同意不得转载 前言 记录下自己的复现,保留意见 2017年6月13日,微软官方发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快 ...
- [CVE-2017-5487] WordPress <=4.7.1 REST API 内容注入漏洞分析与复现
记录下自己的复现思路 漏洞影响: 未授权获取发布过文章的其他用户的用户名.id 触发前提:wordpress配置REST API 影响版本:<= 4.7 0x01漏洞复现 复现环境: 1) Ap ...
- 2014-7-7 NOIP模拟赛(图论)
1.无线通讯网(wireless.pas/cpp/c) [题目描述] 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配 ...
- 黑马tomact学习一 tomcat下载 安装和卸载
- 2018ccpc_hn
A. Easy h-index #include <iostream> #include <algorithm> #include <cstring> #inclu ...
- Hexo搭建博客教程(2) - 博客的简单个性化配置
本章主要讲博客的个性化,譬如站点的基本配置(语言.头像.站点图标等).安装新的Hexo主题(NexT主题)以及主题的配置. 1. 修改站点配置 打开站点配置文件 ,找到: # Site title: ...
- [题解](组合数/二位前缀和)luogu_P2822组合数问题
首先要知道C(n,m)=C(n-1,m)+C(n-1,m-1),这样显然是一个杨辉三角,这样大部分的问题就解决了, 那么判能否整除只需要杨辉三角对k取模即可, 而对于多组数据的k都是一样的,所以用前缀 ...