请注意,本文编写于 352 天前,最后修改于 350 天前,其中某些信息可能已经过时。
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
注意我延时秒数写的很大,就是为了确保文件异地备份完成并且时间一定是跨越了一天。