一、初衷
在工作过程中需要多次备份账套,多次还原账套,每次需点击SQL Server登录、验证,定位到指定数据库 备份 - 输入备份名称等等一系列操作,很麻烦,我需要什么,我只要点一下备份,给我备份到这个位置就行!!!
二、前提
备份脚本名称构成部分:BACKUP_数据库名.bat
还原脚本名称构成部分: RESTORE_数据库名.bat
命名规范必须遵循,为何要如此命名?通俗易通!再加上 【数据库名】 是一个变量,提高扩展性,在脚本中会直接用到
三、代码实现
以下脚本中 rem 是注释的意思,可以删掉
1、备份脚本 - 需更改
BACKUP_DIR为备份的公共路径,比如:D:\SQLBak
数据库CS01,一备份便会创建D:\SQLBak\CS01\CS01_20240202_145434.bak备份文件,在公共路径中文件夹不存在会被自动创建出来
后面的备份文件名采取【数据库名】_【年月日】_【时分秒】.bak 的格式
@echo off
rem 获取当前脚本的文件名(不带扩展名)
set SCRIPT_NAME=%~n0
for /f "tokens=2 delims=_" %%a in ("%SCRIPT_NAME%") do set DATABASE_NAME=%%a
rem 设置 SQL Server 连接信息
set SERVER_NAME=需更改
set BACKUP_DIR=需更改
rem 获取当前系统日期和时间,格式为年月日时分秒
for /f %%a in ('powershell Get-Date -Format "yyyyMMdd_HHmmss"') do (
set "DATETIME=%%a"
)
rem 设置备份文件名
set BACKUP_PATH=%BACKUP_DIR%\%DATABASE_NAME%\%DATABASE_NAME%_%DATETIME%.bak
if not exist "%BACKUP_DIR%\%DATABASE_NAME%" mkdir "%BACKUP_DIR%\%DATABASE_NAME%"
rem 执行备份命令
sqlcmd -S %SERVER_NAME% -d %DATABASE_NAME% -U 需更改 -P 需更改 -Q "BACKUP DATABASE [%DATABASE_NAME%] TO DISK='%BACKUP_PATH%' WITH INIT, FORMAT"
pause
2、还原脚本 - 需更改
@echo off
rem 获取当前脚本的文件名(不带扩展名)
set SCRIPT_NAME=%~n0
for /f "tokens=2 delims=_" %%a in ("%SCRIPT_NAME%") do set DATABASE_NAME=%%a
rem 设置 SQL Server 连接信息
set SERVER_NAME=需更改
set /p FILE_NAME=Enter the file name:
rem set BACKUP_PATH=D:\SQLBak\%DATABASE_NAME%\%FILE_NAME%.bak
set BACKUP_PATH=需更改公共路径\%DATABASE_NAME%\%FILE_NAME%.bak
sqlcmd -S %SERVER_NAME% -d master -U 需更改 -P 需更改 -Q "RESTORE DATABASE [%DATABASE_NAME%] FROM DISK='%BACKUP_PATH%' WITH REPLACE"
pause
四、效果展示
1、备份脚本效果展示
2、还原脚本效果展示
回车