数据库远程全备份的一种解决方案
数据库远程全备份的一种解决方案
--exec BackUPDatabase_MaJiatao 'pubs','\\XZ154\ABC$','16:50:00.000',1,'XZ154\MaJiatao','MaJiatao'/***************************************************描述:数据库全备份和增量备份编写:马加涛修改:马加涛:2014-02-12:1.加入了备份路径可以选择本机和远程路径2.修正了保存历史备份记录的方式,不在需要本机硬盘上的文本文件来做保存介质***************************************************/if object_id('BackUPDatabase_MaJiatao') is not nulldrop PRoc BackUPDatabase_MaJiatao
GO
alter proc BackUPDatabase_MaJiatao@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) 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)')elsebeginif not exists(select * from syscolumns where name='file_is_exists' and ID=object_id(N'backup_recorder'))begindrop table backup_recorderexec('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)')endend
declare @backup_set_full sysname,@backup_set sysname,--备份文件名称@backup_name sysname
declare @Return_Int intdeclare @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)=''--备份目录为空,使用系统默认目录beginSELECT @physical_backup_device_name=ltrim(rtrim(reverse(filename))) FROM master.dbo.sysdatabases where name=@database_nameset @physical_backup_device_name=reverse(substring(@physical_backup_device_name,charindex('\',@physical_backup_device_name)+5,260))+'backup'end
--判断路径是网络路径还是本机路径if left(@physical_backup_device_name,2)='\\' and ltrim(rtrim(@UserName))<>'' and ltrim(rtrim(@Password))<>''beginselect @CommandText='net use '+@physical_backup_device_name+' "'+@Password+'" /user:'+@UserNameexec master..xp_cmdshell @CommandText,no_outputend
--确定目录是否存在select @CommandText='dir '+@physical_backup_device_name+'\全备份'exec @Return_Int=master..xp_cmdshell @CommandText, no_outputif @Return_Int<>0 --目录不存在,建立beginselect @CommandText='Mkdir '+@physical_backup_device_name+'\全备份'exec @Return_Int=master..xp_cmdshell @CommandText, no_outputend
select @CommandText='dir '+@physical_backup_device_name+'\差异备份'exec @Return_Int=master..xp_cmdshell @CommandText, no_outputif @Return_Int<>0 --目录不存在,建立beginselect @CommandText='Mkdir '+@physical_backup_device_name+'\差异备份'exec @Return_Int=master..xp_cmdshell @CommandText, no_outputend
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 nulldrop table #backup_recorderCREATE 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 --没有全备份文件存在,进行全备份beginselect @backup_set_full='全备份 '+@database_nameselect @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_fullif @@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_existsfrom backup_recorderwhere backup_name<>@physical_backup_device_name_now and is_all_backup='1' and file_is_exists='1'endendelsebegin--有全备份,验证全备份是否为上一天得指定时间之后--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),':',''),'.','')--进行全备份beginselect @backup_set_full='全备份 '+@database_nameselect @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_fullif @@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_existsfrom backup_recorderwhere backup_name<>@physical_backup_device_name_now and is_all_backup='1' and file_is_exists='1'endendelse--当前备份时间小于指定的全备份时间,进行差异备份begin
select @backup_set_full='增量备份 '+@database_nameselect @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_setif @@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_existsfrom backup_recorderwhere backup_name<>@physical_backup_device_name_now and is_all_backup='0' and file_is_exists='1'endendend
DECLARE DelFilePathName CURSOR FORWARD_ONLY FOR select backup_path From #backup_recorder OPEN DelFilePathNameFETCH NEXT FROM DelFilePathName into @DelFilePathNameWHILE @@FETCH_STATUS = 0beginif exists(select *from backup_recorder where backup_path=@DelFilePathName and backup_name<>@physical_backup_device_name_now)beginselect @CommandText='del '+@DelFilePathNameexecute @Return_Int=master..xp_cmdshell @CommandText--,no_outputif @Return_Int=0 beginupdate backup_recorder set file_is_exists=0 where backup_path=@DelFilePathNameendendFETCH NEXT FROM DelFilePathName into @DelFilePathNameendCLOSE DelFilePathNameDEALLOCATE DelFilePathName
if object_id('tempdb..#backup_recorder') is not nulldrop table #backup_recorder
if left(@physical_backup_device_name,2)='\\' and ltrim(rtrim(@UserName))<>'' and ltrim(rtrim(@Password))<>''beginselect @CommandText='net share '+@physical_backup_device_name+' /delete'exec master..xp_cmdshell @CommandText,no_outputend
以上就是数据库远程全备份的一种解决方案的内容,更多相关文章请关注PHP中文网(www.php.cn)!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP和PDO:如何执行数据库备份和还原操作在开发Web应用程序时,数据库的备份和还原是非常重要的任务。PHP作为一门流行的服务器端脚本语言,提供了丰富的库和扩展,其中PDO(PHP数据对象)是一款强大的数据库访问抽象层。本文将介绍如何使用PHP和PDO来执行数据库备份和还原操作。第一步:连接数据库在实际操作之前,我们需要建立与数据库的连接。使用PDO对

在当前互联网时代,数据的重要性不言而喻。作为互联网应用的核心组成部分之一,数据库的备份与恢复工作显得尤为重要。然而,随着数据量的不断增大和业务需求的日益复杂,传统的数据库备份与恢复方案已无法满足现代应用的高可用和高性能要求。因此,对MySQL数据库备份与恢复性能进行优化成为一个亟需解决的问题。在实践过程中,我们采取了一系列的项目经验,有效提升了MySQL数据

在开发业务系统过程中,数据库是非常重要的一环。因此,对数据库进行备份和恢复是非常必要的操作。本文将结合ThinkPHP6框架实例,介绍如何使用ThinkPHP6实现数据库备份与恢复。一、数据库备份1.1环境准备在进行数据库备份之前,需要确认如下几点:1、需要设置好mysql数据库的bin目录地址,并把其路径加入系统Path变量中;2、需要安装好mysqld

标题:利用ThinkORM实现数据库备份和还原导语:在开发过程中,数据库备份和还原是非常重要的一项任务。本文将介绍如何利用ThinkORM框架实现数据库备份和还原的方法,并提供相应的代码示例。一、背景介绍在开发过程中,我们通常会使用数据库来存储和管理数据。而数据库备份和还原则是对数据库进行定期备份,以便在数据库出现问题或数据丢失的情况下能够快速恢复数据。借助

在Golang中备份数据库对于保护数据至关重要。可以使用标准库中的database/sql包,或第三方包如github.com/go-sql-driver/mysql。具体步骤包括:连接到数据库。创建一个文件来存储备份数据。使用Dump函数或Exporter将数据库备份到文件中。

随着互联网的快速发展,大规模MySQL数据库备份和恢复成为各大企业和网站必备的技能之一。而随着Memcached的广泛应用,如何备份和恢复Memcached也成为了一个重要的问题。PHP作为Web开发的主力语言之一,在处理备份和恢复MySQL和Memcached上拥有独特的优势和技巧。本文将详细介绍PHP处理MySQL和Memcached备份与恢复的实现方法

如今在网络的世界中,网站已经成为了每个企业、组织或个人展示自己品牌、服务、产品等的重要载体,为了保证网站的正常运行和安全性,需要我们不断地进行数据库的备份、优化和恢复。而宝塔面板作为一款操作简单、功能丰富、界面美观的服务器管理软件,在数据库管理方面也是相当优秀的,具有着备份、优化和恢复等重要功能。本文将会重点介绍宝塔面板的数据库备份、优化和恢复功能以及相关注

MySQL数据库备份与恢复策略的项目经验解析摘要:MySQL数据库作为一种开源而且稳定可靠的关系型数据库管理系统,被广泛应用于各种企业项目中。数据库备份与恢复是保障数据安全和可用性的重要工作,本文将分享一些在项目中积累的MySQL数据库备份与恢复策略的实践经验。引言:对于任何一个企业来说,数据是最重要的财富之一,而数据库则是保存、管理和处理这些数据的核心系统
