在widows系统上写个bat脚本定时备份oracel数据库的,但一执行bat脚本就会报“LRM-00112: 参数 'logfile' 不允许有多个值”,网上资源都是说创建逻辑目录可能有空格,我就重新修改了逻辑目录还是不是行的,以为下面的语句的问题:我都是习惯生产的名字为back_20190419.log这样形式的没有双引号,这个语句在我在其它服务器执行一点都没有问题的
expdp %bakdbname%/%bakdbpasswd%@%sid% directory=BACKDIR dumpfile=%dumpbame%_%BACKUPDATE%.dmp logfile=%dumpbame%_%BACKUPDATE%.log
加上双引号就可以执行了也确实不报错了
expdp %bakdbname%/%bakdbpasswd%@%sid% directory=BACKDIR dumpfile="%dumpbame%_%BACKUPDATE%.dmp" logfile="%dumpbame%_%BACKUPDATE%.log"
但是还是没有解决这个报错的问题,最后发现是bat批处理的时间机制问题的:用%time:~0,2%%time:~3,2%%time:~6,2%时有个问题, 就是如果TIME 是00点的时候,电脑显示的是0不是00所以%time:~0,2%就报错了。
例子:2019-4-22时间9:46:01
echo BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2%
BACKUPDATE=20190422 94601(9前面是空格)
echo BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%Time:~3,2%%Time:~6,2%
BACKUPDATE=2019042294637
总结:
1)如果要用%time:~0,2%%time:~3,2%%time:~6,2% (运行脚本的时间一定是在10-23点区间,否则0-9(H)脚本调用函数错误,无法运行)
2)如果要用%time:~1,1%%time:~3,2%%time:~6,2% (建议运行脚本的时间在0-9点这个区间,如果是>9点,比如13点。会造成只显示个
位数字3,比如2019-1-20 时间13:26:20 会显示2019012032620 从而影响时间的整体准确性)
3)或者是直接舍去时间,只用日期来定义文件名。
%date:~0,4%%date:~5,2%%date:~8,2%
比如2019-2-22 那么文件名会显示为20190222.(如果需求是每天做一个备份,那么这样命名是没什么影响的,
完整bat备份脚本:back.bat脚本在每天0晨执行的
@echo off
echo ================================================
echo Windows环境下Oracle数据库的自动备份脚本
echo 1. 使用当前日期命名备份文件。
echo 2. 自动删除15天前的备份。
echo 3.使用expdb命令导出需要先在数据库中创建备份文件存贮目录,sql如下:
echo create directory backdir as 'E:\nx12320_nxchart\data';
echo ================================================
::以“YYYYMMDD”格式取出当前时间。
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%Time:~3,2%%Time:~6,2%
::设置用户名、密码和sid。
set bakdbname=nx12320
set bakdbpasswd=123456
set sid=orcl
set dumpbame=NX12320
set bakdbhome=E:\nx12320_nxchart\data
::创建备份目录。
if not exist "E:\nx12320_nxchart\data" mkdir E:\nx12320_nxchart\data
::expdp备份
expdp %bakdbname%/%bakdbpasswd%@%sid% directory=BACKDIR dumpfile="%dumpbame%_%BACKUPDATE%.dmp" logfile="%dumpbame%_%BACKUPDATE%.log"
::切换目录
e:
cd %bakdbhome%
::调用rar进行压缩
"C:\Program Files\WinRAR\WinRAR.exe" a -m5 -dw %dumpbame%_%BACKUPDATE%".zip" "%dumpbame%_%BACKUPDATE%.log" "%dumpbame%_%BACKUPDATE%.DMP"
::删除10天前的备份。
forfiles /p "%bakdbhome%" /s /m *.zip /d -15 /c "cmd /c del @path"
exit