创建计划任务用bat批处理定时备份sqlserver数据库

时间:2024-03-20 18:37:11

选择创建计划任务备份数据库其实是自己给自己挖了一个坑,在安装SQLSERVER数据库的时候没有注意版本,安装的是express版本,而这个版本是没有【SQLSERVER代理】功能的。就没有办法在SQLSERVER上直接创建备份作业来定时备份数据库。必须得重新安装数据库,但是服务器已经全部配置好了,客户已经在正常使用了,怕重新安装数据库出问题,所以就想着用其他的办法来对数据库进行备份。在这里建议安装Standard版本的数据库,功能比较齐全。本来可以选择第三方的数据库备份工具(网上有很多),后来搜到可以用批处理来执行sql语句备份数据库,自己还没有试过,所以就选择了这种办法,还算比较安全吧!

下面就介绍一下具体的代码

首先是备份数据库的sql语句sqlserver_backups.sql:

DECLARE @dataname varchar(50)
DECLARE @datetime char(10)
DECLARE @path varchar(255)
DECLARE @bakfile varchar(255)
set @dataname='dataname'
set @datetime=Datename(year,GetDate())+'_'+Datename(month,GetDate())+'_'+Datename(day,GetDate())
set @path='D:\'
set @[email protected]+''[email protected]+'_'+'bak_'[email protected]+'.bak'
backup database @dataname to [email protected] with [email protected]
go

备份文件放在路径path中,备份的名字为“dataname_bak_2019_03_19.bak"

 

下来是执行sql语句的bat文件sqlserver_backups.bat。注意编码格式要是ANSI的。

@echo off
osql -S 数据库服务器名 -U 账号 -P 密码 -i D:\sqlserver_backups.sql 
pause

说明一下,-i后面是sql文件的路径名,一般建议放在同一文件夹下。还有此处的osql是关键字,我本地电脑是win7的系统,所以可以使用,但是客户服务器是server08r2的系统,就不一样了,使用的关键字是sqlcmd

@echo off
sqlcmd -S 服务器地址 -U 账号 -P 密码 -i "sqlserver_backups.sql"
pause

pause是暂停,可以看到输入的内容,如果不想看到,在执行完后直接退出可以把pause改为exit。

创建完这两个文件后可以直接点击bat文件运行,在path路径下查看数据库是否备份成功。

 

再下来是删除备份数据库的bat文件sqlserver_delbackups.bat,主要目的是删除前一个月的数据库备份文件。如现在是3月,则把1月备份的文件删除掉,查询符合月份名字的文件进行删除。如删除1月的文件则查询文件名包含"_01_"内容的文件进行删除。

rem 批处理文件循环执行删除一个月之前的数据库备份文件
@echo off 
setlocal enabledelayedexpansion
set mymon=%DATE:~5,2%
set m=01
if %mymon%=="01" m=11
if %mymon%=="02" m=12
if %mymon%=="03" m=01
if %mymon%=="04" m=02
if %mymon%=="05" m=03
if %mymon%=="06" m=04
if %mymon%=="07" m=05
if %mymon%=="08" m=06
if %mymon%=="09" m=07
if %mymon%=="10" m=08
if %mymon%=="11" m=09
if %mymon%=="12" m=10
rem 设置删除目录
set workPath=D:\
rem 跳转到删除目录
pushd %workPath%
rem 拼接查询关键字例如"_01_"为一月数据
set B=_
set "m=%b%%m%%b%"
rem 循环执行删除文件操作
FOR /F "delims==" %%i IN ('dir /b ^|findstr "%m%*"') DO del %%i
exit

在FOR循环中查询(findstr)目录(dir)下包含关键字为m的文件,存在后则删除(del)文件(%%i)。

在以上文件都创建成功并正常运行之后,在创建windows定时任务,右键点击“电脑”,选择“管理”进入管理工具。

“系统工具”->“任务计划程序”->“创建任务”

在这里也有个坑,开始创建的是“创建基本任务”,但是点击“运行”时可以正常运行,但是没有在定时时正常运行。后来改成“创建任务”后就执行了,也不知道是什么原因(有知道的可以回复一下)。

下面图片是用别人的“创建任务”的操作图片,网址https://blog.csdn.net/qq1049/article/details/78676504,画红线部分是应该注意的地方,不注意会出问题。

创建计划任务用bat批处理定时备份sqlserver数据库

点击“创建任务”后如图所示:填写好相应的名称和勾选好必要的条件

创建计划任务用bat批处理定时备份sqlserver数据库

选择“触发器”选项,点击“新建”,创建任务执行时间,“重复任务间隔”这个选择后,后面有时间选择,是每小时,还是每分,可自己选择后再修改时间,再确定。

创建计划任务用bat批处理定时备份sqlserver数据库

创建计划任务用bat批处理定时备份sqlserver数据库

再来配置需要执行的“操作”,就是选择所写的程序或是BAT文件,这里很重要的配置是选择BAT文件后,在“起始于(可选)”这里一定要填写相应执行程序或是BAT文件的所在目录,要不然是执行不成功的。

创建计划任务用bat批处理定时备份sqlserver数据库

创建计划任务用bat批处理定时备份sqlserver数据库

创建计划任务用bat批处理定时备份sqlserver数据库

 

创建计划任务用bat批处理定时备份sqlserver数据库

这样这个备份数据库并定期删除数据库备份文件的操作就完成了!