备份脚本小结

1、数据库完整备份和差异备份的存储过程:


USE [xxxDB]
GO


SET ANSI_NULLS ON
GO


SET QUOTED_IDENTIFIER ON
GO
-- backpath 备份路径
-- deldate 保存备份的天数
-- dbname备份的数据库名


CREATE proc [dbo].[DBA_BackupFullDB]
@deldate varchar(50)
,@bakpath varchar(50)
,@dbname varchar(50)
as
declare @sqltxtdel varchar(max)
,@createpath varchar(max)
,@backupdb varchar(max)
,@ddate varchar(8)
,@dweek varchar(10)
,@weekday int
,@filename varchar(500)
,@sqltxtcopy varchar(max)
set @ddate = convert(char(8),getdate(),112)
set @dweek = datepart(week,getdate())
set @weekday = datepart(weekday,getdate())
set @createpath=‘exec (‘‘xp_create_subdir ‘‘‘‘‘[email protected]+‘\‘[email protected]+‘‘‘‘‘‘‘)‘
print @createpath
exec (@createpath)
if (@weekday = 1 )
begin
--set @deldate=‘-9‘ 保存备份的天数
set @sqltxtdel =‘xp_cmdshell ‘‘forfiles /P ‘[email protected]+‘ /D ‘[email protected]+‘ /S /M *.full /c "cmd /c del @file"‘‘‘
print @sqltxtdel
exec (@sqltxtdel)
--完整备份
set @backupdb=‘
backup database [‘[email protected]+‘] to disk = ‘‘‘[email protected]+‘\‘[email protected]+‘\‘[email protected]+‘_‘[email protected]+‘_‘[email protected]+‘.full‘‘
WITH CHECKSUM, COMPRESSION

print @backupdb
exec (@backupdb)
end
else
begin
--set @deldate = ‘-8‘
set @sqltxtdel =‘xp_cmdshell ‘‘forfiles /P ‘[email protected]+‘ /D ‘[email protected]+‘ /S /M *.diff /c "cmd /c del @file"‘‘‘
print @sqltxtdel
exec (@sqltxtdel)
--差异备份
set @backupdb=‘
backup database [‘[email protected]+‘] to disk = ‘‘‘[email protected]+‘\‘[email protected]+‘\‘[email protected]+‘_‘[email protected]+‘_‘[email protected]+‘.diff‘‘
WITH CHECKSUM,COMPRESSION,differential

-- print @backupdb
exec (@backupdb)
end


GO


 

以上存储过程可以结合下面的作业脚本实现每日的备份:

declare @delday int,
        @bakpath varchar(50),
        @dbname varchar(500)

set @delday=‘-16‘
set @bakpath=‘F:\DBbackup‘

-- backpath 备份路径
-- deldate 保存备份的天数
-- dbname备份的数据库名

declare  mycursor cursor for
select db_name(b.database_id)
from sys.dm_hadr_availability_replica_states a
    join sys.dm_hadr_database_replica_states  b on a.group_id=b.group_id and a.replica_id=b.replica_id
where role=1
open mycursor
fetch next from mycursor into @dbname
--获取需要备份的数据库名称(always on中的数据库)
while @@FETCH_STATUS=0
begin
print @dbname
exec DBA_BackupFullDB @delday,@bakpath,@dbname

fetch next from mycursor into @dbname
end

close mycursor
deallocate mycursor

2、日志备份的可用的存储过程:

USE [xxDB]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE proc [dbo].[DBA_BackupLog]
        @deldate varchar(50)
        ,@bakpath varchar(50)
        ,@dbname varchar(50)
as        

declare @sqltxtdel varchar(max)
        ,@createpath varchar(max)
        ,@backupLog varchar(max)
        ,@sn nvarchar(50)

--set @bakpath  备份路径
--set @deldate  日志保留天数

set @createpath=‘
sp_msforeachdb ‘‘xp_create_subdir ‘‘‘‘‘+@bakpath+‘\‘+@dbname+‘\‘‘‘‘‘‘‘
print @createpath
exec (@createpath)

set @sqltxtdel =‘
xp_cmdshell ‘‘forfiles /P ‘+@bakpath+‘\‘+@dbname+‘ /D ‘+@deldate+‘ /S /M *.trn /c "cmd /c del @file"‘‘‘
print @sqltxtdel
exec (@sqltxtdel)
-- 日志备份开始
set @sn = replace(replace(replace(convert(varchar,getdate(),120),‘-‘,‘‘),‘ ‘,‘‘),‘:‘,‘‘)
set @backupLog=‘backup Log [‘+@dbname+‘] to disk = ‘‘‘+@bakpath+‘\‘+@dbname+‘\‘+@dbname+‘_No‘+@sn+‘.trn‘‘ with compression‘
print @backuplog
exec (@backuplog)

GO

以上存储过程可在作业中调用,根据需要制定备份的计划,可在sqlserver代理的作业中实现备份策略。

时间: 2025-01-12 04:00:38

备份脚本小结的相关文章

WEB页面,WEB环境版本,数据库,整站备份脚本

#!/bin/bash # #WEB页面,WEB环境版本,数据库,整站备份脚本 #当发生某个原因导致整个服务器无法恢复时,利用上面备份的相关数据即可重做一台一样的服务器 date_a=`date +%Y%m%d-%H%M%S` mkdir -p /web_bak/${date_a}/conf &> /dev/null mkdir -p /web_bak/${date_a}/web &> /dev/null mkdir -p /web_bak/${date_a}/mysql &a

mysql备份脚本

对extmail数据库进行每天01:00完全热备份,并可以完全恢复! 一.先建立备份脚本,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 vi mysql_extmail_bak.sh #!/bin/bash # Program #    use mysqldump to Fully backup mysql data per week! BakDir=/mysqlback#要备份到的目录 LogFile=/var/log/bak.log#备份记录日志

linux 自动备份脚本

首先我在/root/backup 目录下建立一个文件夹, #mkdir /root/backup/mysqlbackup 以后在每天五点钟,就会有一个文件保存在这里. 接着新建文件 #vim /root/mysqlautobak 输入: filename=` date +%Y%m%d ` mysqldump --all-databases -uroot -p(mysql密码)> /root/backup/mysqlbackup/mysql$file.sql 保存退出! 让它可以执行 #chomd

Xtrabackup全量备份/增量备份脚本

一.全量备份脚本 1.全量备份脚本 #!/bin/bash #Description:xtrabackup complete #Author:created by michael #2017-08-07 v0.1 # USER=root PASSWD=123456 BACKUP_DIR=/backup/mysql/complete DATE=$(date +"%F_%T") [[ -d $BACKUP_DIR ]] || mkdir $DATE_DIR innobackupex --u

分享一个MySQL分库分表备份脚本(原)

分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上时间方便整理 2.取数据库:抓取数据库名称,我用的awk和grep配合取数据库的名称(如果想按照表备份可以再细化一下)注意要用mysql -e选项 这样才能做成脚本 3.系统环境变量:因为用到了函数,所以非系统内置的命令 最好在脚本里面用 . /etc/profile  把系统当前的环境变量传过来

mysql数据库备份脚本

自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #20170329 #Define PATH定义变量 BAKDIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=webapp MYSQLPW=backup MYSQLUSR=backup #must use root user run scripts 必须使用root用户运行,$UID为系统变量 if

mysql 备份脚本以及定时任务

数据是企业最宝贵的资源,作为运维人员备份数据库的数据是特别重要的一项工作,以下是个人查找资料以及个人总结所记录的mysql数据库备份脚本,记录在此作为学习和复习笔记. (1)分库备份脚本 #/bin/sh #version 0.1 MYUSER=root MYPASS=123123 #SOCKET=/data/3306/mysql.sock MYLOGIN="mysql -u$MYUSER -p$MYPASS " MYDUMP="mysqldump -u$MYUSER -p$

mysql全库备份/增量备份脚本

http://hongge.blog.51cto.com/ 生产环境中Mysql数据库的备份是周期性重复的操作,所以通常是要编写脚本实现,通过crond计划任务周期性执行备份脚本 mysqldump备份方案: 周日凌晨1点全库备份 周一到周六凌晨每隔4个小时增量备份一次 设置crontab任务,每天执行备份脚本 # crontab –e #每个星期日凌晨1:00执行完全备份脚本 0 1 * * 0 /root/mysqlfullbackup.sh >/dev/null 2>&1 #周一

SQL Server自动备份脚本

SQL Server备份脚本: 脚本周三全备份,其他时间差异备份. declare @device varchar(30); declare @filename varchar(50); declare @datetime varchar(50); declare @weekname varchar(50); declare @weeknametmp varchar(4); declare @weekday int; set @weekname=datename(weekday,getdate(