SqlServer同一实例备份所有数据库
【效果图展示】
【需求】
- SqlServer同一个实例存在多个数据库
- 系统数据库(‘master’,‘tempdb’,‘model’,‘msdb’,‘ReportServer’)不需要备份
- 手动配置系统设定3个时间点每天windows系统自动备份数据库
- 手动配置数据库存储的时间自定义
- 上述配置完毕后下次运行不需要手动二次配置需求参数
- 批处理打开有闪光效果
【代码展示】
@echo off
SETLOCAL enabledelayedexpansion
title SqlServer备份助手
::判断config文件是否存在
if exist config.ini goto:sql
if not exist config.ini goto:loop
cls
::SQL配置信息
:loop
::删除temp目录下的文件
del /q /s C:\Users\Administrator\AppData\Local\Temp\dblist.txt
del /q /s C:\Users\Administrator\AppData\Local\Temp\config.ini
del /q /s C:\Users\Administrator\AppData\Local\Temp\sql备份助手.BAT
cls
::44
echo.
echo.
color F
ECHO.
ECHO.
ECHO 请 输 入 配 置 信 息
ECHO.
ping 127.1 -n 1 >nul
cls
::43
echo.
echo.
color E
ECHO.
ECHO.
ECHO 请 输 入 配 置 信 息
ECHO ■
ping 127.1 -n 1 >nul
cls
::42
echo.
echo.
color D
ECHO.
ECHO.
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::41
echo.
echo.
color C
ECHO.
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::40
echo.
echo.
color B
ECHO ■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::39
echo.
echo.
color A
ECHO ■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::38
echo.
echo.
color 9
ECHO ■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::37
echo.
echo.
color 8
ECHO ■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::36
echo.
echo.
color 7
ECHO ■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::35
echo.
echo.
color 6
ECHO ■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::34
echo.
echo.
color 5
ECHO ■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::33
echo.
echo.
color 4
ECHO ■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::32
echo.
echo.
color 3
ECHO ■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::31
echo.
echo.
color 2
ECHO ■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::30
echo.
echo.
color 1
ECHO ■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::29
echo.
echo.
color A
ECHO ■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::28
echo.
echo.
color B
ECHO ■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::27
echo.
echo.
color C
ECHO ■■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::26
echo.
echo.
color D
ECHO ■■■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::25
echo.
echo.
color E
ECHO ■■■■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::24
echo.
echo.
color F
ECHO ■■■■■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::23
echo.
echo.
color 1
ECHO ■■■■■■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::22
echo.
echo.
color 2
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::21
echo.
echo.
color 3
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::20
echo.
echo.
color 4
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::19
echo.
echo.
color 5
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ping 127.1 -n 1 >nul
cls
::18
echo.
echo.
color 6
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■
ping 127.1 -n 1 >nul
cls
::17
echo.
echo.
color 7
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■
ping 127.1 -n 1 >nul
cls
::16
echo.
echo.
color 8
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■
ping 127.1 -n 1 >nul
cls
::15
echo.
echo.
color 9
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■
ping 127.1 -n 1 >nul
cls
::14
echo.
echo.
color F
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■
ping 127.1 -n 1 >nul
cls
::13
echo.
echo.
color E
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■
ping 127.1 -n 1 >nul
cls
::12
echo.
echo.
color D
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■
ping 127.1 -n 1 >nul
cls
::11
echo.
echo.
color C
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■
ping 127.1 -n 1 >nul
cls
::10
echo.
echo.
color B
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::9
echo.
echo.
color A
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::8
echo.
echo.
color 9
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::7
echo.
echo.
color 8
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::6
echo.
echo.
color 7
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::5
echo.
echo.
color 6
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::4
echo.
echo.
color 5
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::3
echo.
echo.
color 4
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::2
echo.
echo.
color 3
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
::1
echo.
echo.
color 2
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■■■■
ping 127.1 -n 1 >nul
cls
echo.
echo.
color F
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 请 输 入 配 置 信 息 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■■■■
timeout -t 0 >nul
ping 127.1 -n 1 >nul
echo.
echo.
SET /p "ip=请输入数据库IP地址: "
(ECHO %ip%) >> config.ini
echo.
SET /p "use=请输入数据登录名: "
(ECHO %use%) >> config.ini
echo.
SET /p "psd=请输入数据库密码: "
(ECHO %psd%) >> config.ini
::SET /p "dbname=请输入数据库名称:"
::ECHO %dbname% >> config.ini
echo.
echo ★★数据库备份路径示例★★
echo 若保存到D盘的dbbak文件夹下请输入d:\dbbak
echo.
SET /p "str=请输入数据库备份的路径: "
(ECHO %str%) >> config.ini
echo.
SET /p "stime=请输入数据库保存大于10天周期天数: "
(ECHO %stime%) >> config.ini
ping 127.1 -n 1 >nul
md %str%
::添加windows计划任务
schtasks /delete /F /tn "sqldb01"
schtasks /delete /F /tn "sqldb02"
schtasks /delete /F /tn "sqldb03"
::添加bat到temp目录下
for /f "delims=" %%i in ('"dir /a/s/b/on sql备份助手.BAT"') do (
set file=%%~fi
copy %%~fi C:\Users\Administrator\AppData\Local\Temp
)
cls
::schtasks /create /sc minute /mo 360 /tn "SQLBAK" /tr SQLBAK.bat
echo.
echo ★★数据库每天定时运行的时间设置示例★★
echo 若每天08:05运行,请输入08:05
echo.
set /p "attime01=请输入数据库定时保存时间(1): "
ping 127.1 -n 1 >nul
set /p "attime02=请输入数据库定时保存时间(2): "
ping 127.1 -n 1 >nul
set /p "attime03=请输入数据库定时保存时间(3): "
ping 127.1 -n 1 >nul
schtasks /create /sc DAILY /tn "sqldb01" /tr C:\Users\Administrator\AppData\Local\Temp\sql备份助手.BAT /st %attime01%
ping 127.1 -n 1 >nul
schtasks /create /sc DAILY /tn "sqldb02" /tr C:\Users\Administrator\AppData\Local\Temp\sql备份助手.BAT /st %attime02%
ping 127.1 -n 1 >nul
schtasks /create /sc DAILY /tn "sqldb03" /tr C:\Users\Administrator\AppData\Local\Temp\sql备份助手.BAT /st %attime03%
ping 127.1 -n 1 >nul
cls
::SQL备份开始
:sql
echo.
for /f "delims=" %%a in (config.ini) do (
set /a n+=1
if !n!==1 SET ip=%%a
if !n!==2 SET use=%%a
if !n!==3 SET psd=%%a
if !n!==4 SET str=%%a
if !n!==5 SET stime=%%a
)
cls
COLOR C
echo.
echo.
echo.
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 数 据 库 开 始 备 份 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■■■■
timeout -t 1 >nul
::生成数据库所有的库名
sqlcmd -S %ip% -U %use% -P %psd% -d"master" -Q"select name from master.dbo.sysdatabases where name not in('master','tempdb','model','msdb','ReportServer') " -o dblistold.txt
::去dblist.txt里所有空格
(for /f "delims=" %%a in (dblistold.txt) do (
set "line=%%a"
set "line=!line: =!"
echo !line!
))>dblist.txt
ping 127.1 -n 1 >nul
del /q dblistold.txt
ping 127.1 -n 1 >nul
if exist C:\Users\Administrator\AppData\Local\Temp\config.ini goto :beginsqlautobak
ping 127.1 -n 1 >nul
if not exist C:\Users\Administrator\AppData\Local\Temp\config.ini copy /y dblist.txt C:\Users\Administrator\AppData\Local\Temp\
if not exist C:\Users\Administrator\AppData\Local\Temp\config.ini copy /y config.ini C:\Users\Administrator\AppData\Local\Temp\
:beginsqlautobak
::--------------------------------------------------------------------------------------------------------------
goto :loop1
(set /p line1=&set /p line2=&set /p line3=&set /p line4=&set /p line5=&set /p line6=&set /p line7=&set /p line8=&set /p line9=&set /p line10=&set /p line11=&set /p line12=&set /p line13=&set /p line14=)<dblist.txt
:loop1
::--------------------------------------------------------------------------------------------------------------
timeout -t 1 >nul
::SQL数据保存指定天数 2019/4/6 22:14新增
set h=%TIME:~0,2%
if %h% leq 9 (Set h=0%h:~1,1%)
set yymmddhhmiss=%DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日%h:~0,2%时%time:~3,2%分%time:~6,2%秒
::批量创建文件夹
for /f "eol=( skip=2 tokens=*" %%i in (dblist.txt) do md %str%\%yymmddhhmiss%\%%i
timeout -t 1 >nul
::数据库遍历备份[优化文件夹存储bak方式]
for /f "eol=( skip=2 tokens=*" %%i in (dblist.txt) do osql.exe -S %ip% -d master -U %use% -P %psd% -Q "backup database %%i to disk='%str%\%yymmddhhmiss%\%%i\%%i%yymmddhhmiss%.bak' with format,compression,init,skip,stats=1"
timeout -t 1 >nul
::去文件名所有空格
for /f "delims=" %%i in ('dir /s/b %str%\*.*') do (
set "foo=%%~nxi"
set foo=!foo: =!
set foo=!foo: =!
ren "%%~fi" "!foo!"
)
::------------------------------------------------------------------------------------------------------------------------
::拷贝bak
for /f "eol=( skip=2 tokens=*" %%i in (dblist.txt) do copy /y %str%\%%i.bak %str%\%yymmddhhmiss%\%%i\%%i%yymmddhhmiss%.bak
::------------------------------------------------------------------------------------------------------------------------
echo.
echo.
::删除N天前数据库bak文件
forfiles /p "%str%\%yymmddhhmiss%" /m "*.bak" /d -%stime% /c "cmd /c del /f @path"
cls
COLOR F
echo.
echo.
echo.
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 数 据 库 备 份 成 功 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■■■■
echo.
timeout /t 2 >nul
::注释代码
goto :Notes
goto :eof
:ss
set aa=%1
if %aa:~1,1%==( goto ji
goto :eof
:ji
attrib -h -s %str%\%yymmddhhmiss%\%1
rd/s/q %str%\%yymmddhhmiss%\%1
timeout -t 1 >nul
:Notes
cls
COLOR E
echo.
echo.
echo.
echo.
echo.
echo.
echo.
ECHO ■■■■■■■■■■■■■■■■■■■
ECHO ■ ■
ECHO ■ 程序运行完毕 窗口即将关闭 ■
ECHO ■ ■
ECHO ■■■■■■■■■■■■■■■■■■■
timeout -t 2 >nul
exit