oracle需要备份数据后,FTP进行异地备份,数据文件和日志文件名称都包含当天日期,
当备份完成
FTP异地备份提取文件也应为当天日期所以不需要再对日期进行判断

数据文件备份名称 SC20220623.DMP
日志文件备份名称 SC20220623.LOG
FTP写

mget SC%date:~0,4%%date:~5,2%%date:~8,2%.LOG SC%date:~0,4%%date:~5,2%%date:~8,2%.DAT

当备份完成后date时间已经过了当天日期,需要验证备份的数据文件和日志文件是否存在,就需要判断文件名称为前一天的日期
FTP判断写:

set DaysAgo=1
set Today=%date:~0,4%%date:~5,2%%date:~8,2%
set /a PassDays=%Today%-1 
if exist "D:\backup\SC%PassDays%.DAT" (echo -------------数据文件备份完成-------------) else (echo -----------------找不到数据文件-----------------)
if exist "D:\backup\SC%PassDays%.LOG" (echo -------------日志文件备份完成-------------) else (echo -----------------找不到日志文件-----------------)

为了不添加执行计划,就写在一个bat 里面

所以需要延迟启动判断文件的语句
延迟的语句

timeout /nobreak /t 6
其中6是秒数 自行判断备份需要时间去修改

完整的bat

@echo off
::ftp user
set ftpuser=ftp账号
::ftp password
set ftpPass=ftp密码
::ftp ip 
set ftpIP=ftp的IP地址
::Source file server directory
set ftpFolder=FTP原始文件目录地址
::Local storage directory
set LocalFolder=当前备份地址
::核对文件跨天判断前一天日期
set DaysAgo=1
set Today=%date:~0,4%%date:~5,2%%date:~8,2%
set /a PassDays=%Today%-1 
set ftpFile=%temp%/TempFTP.txt
>"%ftpFile%" (
     echo,%ftpUser%
     echo,%ftpPass%
     echo cd "%ftpFolder%"
     echo lcd "%LocalFolder%"
::为了直观有文件在复制开启了hash
     echo hash
     echo bin
     echo mget SC%date:~0,4%%date:~5,2%%date:~8,2%.LOG SC%date:~0,4%%date:~5,2%%date:~8,2%.DAT
     echo bye
)
start ftp -v -i -s:"%ftpFile%" %ftpIP%
timeout /nobreak /t 14400
::打开当前备份文件夹
start D:\backup\
timeout /nobreak /t 14500
if exist "D:\backup\SC%PassDays%.DAT" (echo -------------数据文件备份完成-------------) else (echo -----------------找不到数据文件-----------------)
if exist "D:\backup1\SC%PassDays%.LOG" (echo -------------日志文件备份完成-------------) else (echo -----------------找不到日志文件-----------------)
pause>nul

注意我延时秒数写的很大,就是为了确保文件异地备份完成并且时间一定是跨越了一天。

最后修改:2022 年 06 月 24 日
如果觉得我的文章对你有用,请随意赞赏