--exec BackUPDatabase_LeeHG语句参数说明:
-- 示例:exec BackUPDatabase_LeeHG '参数一','参数二','参数三','参数四','参数五',' 参数六'
-- 参数一:需要备份数据库的名称
-- 参数二:备份文件存放路径,可以是网络路径
-- 参数三:全备份时间
-- 参数四:全备份时间误差范围(小时)
-- 参数五:参数三为网络路径时,访问网络路径的用户名,参数三为本地路径时可输入任意字符。
-- 参数六:参数三为网络路径时,访问网络路径的密码,参数三为本地路径时可输入任意字符。 create proc BackUPDatabase
@database_name sysname, --要备份的数据库名称
@physical_backup_device_name sysname, --备份文件存放目录
@all_backup_datetime char(17)='20:00:00.000', --全备份的时间
@IntDistance int=1, --全备份的时间范围(小时)
@UserName varchar(100), --远程服务器登录名称

  @Password varchar(100)='' --远程服务器登录密码
  with ENCRYPTION

as

/*********************************
declare @database_name sysname, --要备份的数据库名称
@physical_backup_device_name sysname, --备份文件存放目录
@all_backup_datetime char(17) select @database_name='test',
@physical_backup_device_name='E:\备份文件\查询服务器',
@all_backup_datetime='16:00:00.000' ***************************************/ --建立备份历史记录
if not exists (select * from dbo.sysobjects where id = object_id(N'backup_recorder') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
exec('CREATE TABLE backup_recorder (backup_datetime datetime not null,backup_name varchar (500) PRIMARY KEY,backup_path varchar (500) NOT NULL ,is_all_backup char(1) not null default 0,file_is_exists char(1) not null default 0)')
end declare @backup_set_full sysname,
@backup_set sysname, --备份文件名称
@backup_name sysname declare @Return_Int int
declare @CommandText nvarchar(4000) declare @DelFilePathName nvarchar(4000) declare @physical_backup_device_name_now nvarchar(4000) declare @physical_backup_device_namebackup nvarchar(4000) if isnull(@database_name,'')='' or rtrim(@database_name)='' --数据库名称为空
set @database_name=db_name() --备份当前数据库 if isnull(@physical_backup_device_name,'')='' or rtrim(@physical_backup_device_name)=''
--备份目录为空,使用系统默认目录
begin
SELECT @physical_backup_device_name=ltrim(rtrim(reverse(filename))) FROM master.dbo.sysdatabases where name=@database_name
set @physical_backup_device_name=reverse(substring(@physical_backup_device_name,charindex('\',@physical_backup_device_name)+5,260))+'backup'
end --确定目录是否存在
select @CommandText='dir '+@physical_backup_device_name+'\全备份'
exec @Return_Int=master..xp_cmdshell @CommandText, no_output
if @Return_Int<>0
--目录不存在,建立
begin
select @CommandText='Mkdir '+@physical_backup_device_name+'\全备份'
exec @Return_Int=master..xp_cmdshell @CommandText, no_output
end select @CommandText='dir '+@physical_backup_device_name+'\差异备份'
exec @Return_Int=master..xp_cmdshell @CommandText, no_output
if @Return_Int<>0
--目录不存在,建立
begin
select @CommandText='Mkdir '+@physical_backup_device_name+'\差异备份'
exec @Return_Int=master..xp_cmdshell @CommandText, no_output
end select @physical_backup_device_name_now=@database_name+'_'+
ltrim(rtrim(REPLACE(REPLACE(REPLACE(REPLACE(convert(char(23),getdate(),21),'-',''),':',''),'.',''),' ','')))+
'.bak' if object_id('tempdb..#backup_recorder') is not null
drop table #backup_recorder
CREATE TABLE #backup_recorder (backup_datetime datetime not null,backup_name varchar (500) PRIMARY KEY,backup_path varchar (500) NOT NULL ,is_all_backup char(1) not null default 0,file_is_exists char(1) not null default 0) --检查是否有全备份存在
select @CommandText='dir '+@physical_backup_device_name+'\全备份\*.bak'
exec @Return_Int=master..xp_cmdshell @CommandText, no_output if @Return_Int<>0 --没有全备份文件存在,进行全备份
begin
select @backup_set_full='全备份 '+@database_name select @physical_backup_device_namebackup=@physical_backup_device_name+'\全备份\'+@physical_backup_device_name_now --全备份,重写媒体头
BACKUP DATABASE @database_name to DISK=@physical_backup_device_namebackup WITH FORMAT ,NAME = @backup_set_full if @@error=0 --备份成功,删除当天全备份之前的所有历史备份文件
begin
--写备份日志
insert into backup_recorder
(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)
values
(getdate(),@physical_backup_device_name_now,@physical_backup_device_namebackup,'1','1')
insert into #backup_recorder
(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)
select backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists
from backup_recorder
where backup_name<>@physical_backup_device_name_now and is_all_backup='1' and file_is_exists='1'
end
end
else
begin
--有全备份,验证全备份是否为上一天得指定时间之后
--select @all_backup_datetime=REPLACE(REPLACE(@all_backup_datetime,':',''),'.','') if right(left(right(@physical_backup_device_name_now,21),17),9) between REPLACE(REPLACE(@all_backup_datetime,':',''),'.','') and REPLACE(REPLACE(substring(convert(char(23),dateadd(hh,@IntDistance,@all_backup_datetime),21),12,12),':',''),'.','')
--进行全备份
begin
select @backup_set_full='全备份 '+@database_name select @physical_backup_device_namebackup=@physical_backup_device_name+'\全备份\'+@physical_backup_device_name_now --全备份,重写媒体头
BACKUP DATABASE @database_name to DISK=@physical_backup_device_namebackup WITH FORMAT ,NAME = @backup_set_full if @@error=0 --备份成功
begin
--写备份日志
insert into backup_recorder
(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)
values
(getdate(),@physical_backup_device_name_now,@physical_backup_device_namebackup,'1','1')
--查找历史备份文件
insert into #backup_recorder
(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)
select backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists
from backup_recorder
where backup_name<>@physical_backup_device_name_now and is_all_backup='1' and file_is_exists='1'
end
end else
--当前备份时间小于指定的全备份时间,进行差异备份
begin select @backup_set_full='增量备份 '+@database_name select @physical_backup_device_namebackup=@physical_backup_device_name+'\差异备份\'+@physical_backup_device_name_now --差异备份,追加媒体
BACKUP DATABASE @database_name to DISK=@physical_backup_device_namebackup WITH NOINIT , DIFFERENTIAL,NAME = @backup_set if @@error=0 --备份成功
begin
--写备份日志
insert into backup_recorder
(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)
values
(getdate(),@physical_backup_device_name_now,@physical_backup_device_namebackup,'0','1')
--查找历史备份文件
insert into #backup_recorder
(backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists)
select backup_datetime,backup_name,backup_path,is_all_backup,file_is_exists
from backup_recorder
where backup_name<>@physical_backup_device_name_now and is_all_backup='0' and file_is_exists='1'
end
end end DECLARE DelFilePathName CURSOR FORWARD_ONLY FOR select backup_path From #backup_recorder OPEN DelFilePathName
FETCH NEXT FROM DelFilePathName into @DelFilePathName
WHILE @@FETCH_STATUS = 0
begin
if exists(select *from backup_recorder where backup_path=@DelFilePathName and backup_name<>@physical_backup_device_name_now)
begin
select @CommandText='del '+@DelFilePathName
execute @Return_Int=master..xp_cmdshell @CommandText,no_output
if @Return_Int=0
begin
update backup_recorder set file_is_exists=0 where backup_path=@DelFilePathName
end
end
FETCH NEXT FROM DelFilePathName into @DelFilePathName
end
CLOSE DelFilePathName
DEALLOCATE DelFilePathName if object_id('tempdb..#backup_recorder') is not null
drop table #backup_recorder if left(@physical_backup_device_name,2)='\\' and ltrim(rtrim(@UserName))<>'' and ltrim(rtrim(@Password))<>''
begin
select @CommandText='net share '+@physical_backup_device_name+' /delete'
exec master..xp_cmdshell @CommandText,no_output
end

  

SQLSERVER 差异备份、全备份的更多相关文章

  1. sqlserver全备份,差异备份和日志备份

      差异备份是以上一个全备为基点,这个期间所有差异数据的备份. 日志备份是基于前一个全备+日志备份为基点,这个期间的事务日志的备份.(日志备份用于确保还原数据库到某个时间点)   在利用全备+日志备份 ...

  2. SQL Server差异备份的备份/还原原理

    SQL Server差异备份的备份/还原原理 记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异   备份过程: 1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最 ...

  3. MySQL定时备份(全量备份+增量备份)

    MySQL 定时备份 参考 zone7_ 的 实战-MySQL定时备份系列文章 参考 zmcyu 的 mysql数据库的完整备份.差异备份.增量备份 更多binlog的学习参考马丁传奇的 MySQL的 ...

  4. 备份BinLog并压缩 全备份

    Rem Backup Mysql Binlog Rem Backup Yesterday and RAR Rem Backup every day 00:01 begin backup yesterd ...

  5. mysql全备份脚本速查

    mysql全备份脚本 # 快捷备份方式[root@nb scripts]# cat db.backup.sh #!/bin/bashmysqldump -ubackup -pbackuppwd -P3 ...

  6. 使用mysqldump工具对数据库进行全备份

    需求描述: 通过mysqldump工具的--all-databases选项对所有数据库进行备份. 操作过程: 1.通过--all-databases选项对所有的数据库进行备份 [mysql@redha ...

  7. mysql数据库,什么是数据库的全备份?

    需求描述: 今天要做mysql数据库的全备份,那么就要弄清楚一个概念,到底什么是数据库的全备份呢. 概念解释: 数据库的全备份,就是在一个给定的时间点,对于mysql服务器管理的所有的数据进行备份. ...

  8. 基于全备份+binlog方式恢复数据

    基于全备份+binlog方式恢复数据 将bkxt从库的全备份在rescs5上恢复一份,用cmdb操作 恢复全备后执行如下操作 set global read_only=OFF; stop slave; ...

  9. PROD异机全备份恢复验证实施文档

    PROD异机全备份恢复验证实施文档 ******利用10月25日的全量备份.10月26日当天的归档日志及当前redo日志,恢复数据库到故障前数据库状态****** 准备工作:source 源库:PRO ...

随机推荐

  1. LOJ#111. 后缀排序(二分 hash)

    题意 给出一个字符串,求出排名为$i$个字符串在原串中的开始位置 Sol 纪念一下这伟大的时刻qwq. 我用二分+hash把这题水过去了qwq. #include<cstdio> #inc ...

  2. 【学习笔记】六:面向对象的程序设计——理解JS中的对象属性、创建对象、JS中的继承

    ES中没有类的概念,这也使其对象和其他语言中的对象有所不同,ES中定义对象为:“无序属性的集合,其属性包含基本值.对象或者函数”.现在常用的创建单个对象的方法为对象字面量形式.在常见多个对象时,使用工 ...

  3. MySQL性能优化奇技淫巧

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.   2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使 ...

  4. 遍历PspCidTable枚举进程

    //测试环境:win7 32位 1 // DriverEntry.cpp #include "ntddk.h" #include <ntddvol.h> #includ ...

  5. RSA不对称加密和公钥 私钥

    理论上只要有加密的规则 基本都是可以解密的 但是如果解密需要消耗的时间过长 比如1000年 解密过后已经没什么意义了 此时可认为这种算法不能被破解 也就是说此加密可信 MD5 是一种单向操作 加密后不 ...

  6. Cordova应用的JavaScript代码和自定义插件代码的调试

    我之前写过三篇Cordova相关的技术文章.当我们使用Cordova将自己开发的前端应用打包安装到手机上后,可能会遇到需要调试Cordova应用的时候. 本文就介绍Cordova应用的调试步骤. 如果 ...

  7. Linux Device Driver 学习(1)

    Linux Device Driver 学习(1) 一.搭建虚拟机开发环境 1.选择虚拟机VirtualBox,官网下载.deb包安装: VirtualBox Linux 5.1.6 下载fedora ...

  8. Scalatra

    SBT和giter8 在你开始着手之前,你需要安装两个工具(我假设你已经安装了JDK1.6+).我将给你提供简缩的安装指令,详细版的安装指令可通过 下面的scalatra页面找到( http://ww ...

  9. eclipse中Lombok注解无效

    问题现象:eclipse中使用lombok的@Date,引用get方法时,报错. 解决方案: 在lombok官网(https://www.projectlombok.org/download)下载,或 ...

  10. WPF中实现两个窗口之间传值

    在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...