批处理 完成sqlserver数据库备份,文件备机拷贝

 

应用环境下,数据库和文件经常需要备份,写了如下脚本,可做到备份sqlserver,并将备份文件压缩,拷贝到备份机器上,并且可以拷贝服务器上的图片或应用程序的其他文件到备份机器上

脚本如下,要有的拿去,记得更改红色内容为你本机的设置。

将脚本加到系统定时任务中执行,效果更佳

------------------------------------------------------------------------------------------------------------------------------------------

@echo off
:: --------数据自动备份----------
:: 功能:1.实现生产环境sqlserver数据备份,并将备份文件拷贝到备份服务器上
::       2.实现普通文件从生产环境下的文件,备份到备份服务器上
:: 原理:建立共享磁盘
::       数据库备份使用sqlcmd备份数据库文件,
::       使用rar压缩备份的数据库文件,并将压缩文件拷贝到共享磁盘
::       使用xcopy拷贝生产环境下的文件到备份服务器
::       关闭共享磁盘

:: rar程序路径
set rarexe="C:\Program Files (x86)\WinRAR\WinRAR.exe"

set result=1

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
      SET _second=00%%K
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%
      Set _second=%_second:~-2%

Set logtimestamp=%_yyyy%%_mm%%_dd%%_hour%%_minute%%_second%
goto make_dump

:s_error
echo 生成时间序列出错
Set logtimestamp=_

:make_dump

:: 开始执行备份操作
set  dbbackfilename=D:\MSSQL\Backup\mydatabase_%logtimestamp%.bak
set rarbackfilename=%dbbackfilename:~0,-4%.rar
:: 创建磁盘映射
echo 开始创建磁盘映射H
call :CreateDriverH

:: 数据库备份文件路径
if %result% EQU 1 (
call :DataBaseBackUp %dbbackfilename%
) else ( goto :eof )

echo "开始压缩文件"  %dbbackfilename%
if %result% EQU 1 (
call :RarFile %rarbackfilename%  %dbbackfilename%
) else ( goto :eof )


echo "开始拷贝数据库备份文件"  %rarbackfilename%
if %result% EQU 1 (
call :CopyFolder %rarbackfilename%  H:\
del %rarbackfilename% 
) else ( goto :eof )

echo "开始拷贝文件备份文件"  %rarbackfilename%
if %result% EQU 1 (
call :CopyFolder "C:\Program Files\ServiceFiles"  "H:\BackFiles\ServiceFiles"
call :CopyFolder "C:\Program Files\ImagFiles"  "H:\BackFiles\ImagFiles"
) else ( goto :eof )


echo "删除磁盘映射H"
call :DeleteDriverH

if %result% EQU 1 (
 echo 执行完成
)
goto :eof

:: 创建磁盘映射H
:CreateDriverH
net use H: \\备份机的地址\Database_backup 登入密码 /USER:Administrator
if not exist "H:" (
set result=0
) else (
set result=1
)
goto:eof 

:: 删除磁盘映射H
:DeleteDriverH
if not exist "H:" (
 set result=1
 goto :eof
) else (
net use H: /del /y
)
if not exist "H:" (
set result=1
) else (
set result=0
)
goto:eof 


:: 备份数据库 参数是备份文件的路径
:DataBaseBackUp
echo "开始备份文件" %1
SQLCMD -S . -U 数据库用户名 -P 数据库登入密码 -d mydatabase -Q"BACKUP DATABASE mydatabase to disk='%1'" 
if exist "%1" (
  set result=1
) else (
  set result=0
)
goto:eof 
xcopy
:: 压缩文件 参数:压缩后的文件  压缩前的文件
:RarFile
echo 压缩文件 %rarexe% a "%1" "%2" 
%rarexe% a "%1" "%2" 
if exist "%1" (
  set result=1
  del "%2"
) else (
  set result=0
)
goto:eof 

:: 考别磁盘下的整个目录 参数:源路径 目标路径
:CopyFolder
echo 拷贝目录 %1  %2
xcopy %1  %2  /D /E /Y
goto:eof 

:eof

:: 考别磁盘下的整个目录 参数:源路径 目标路径
:CopyFolder
echo 拷贝目录 %1  %2
xcopy %1  %2  /D /E /Y
goto:eof 

:eof

-------------------------------------------------------------------------------------------------------------------------------------------

由于bat不能发送邮件,所以以上脚本执行出问题了,很难发现问题,我用Python3写了一个可以邮件通知的备份脚本,下载链接

https://download.csdn.net/download/chl0000/10560010

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值