找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: ksly1227

[其他] 调用rman命令备份数据库的批处理日期选择为何进行不下去?

[复制链接]
 楼主| 发表于 2012-3-5 00:02:12 | 显示全部楼层
或者麻烦你把上面那个脚本改下,做为附件传过来,或者加我q 674693899 或者留下你电话咱俩在交流下
 楼主| 发表于 2012-3-5 00:22:04 | 显示全部楼层
还有你怀疑上面的if语句写的有问题,我测试啦以下片段
@set DAY=%date:~13,14%
@set CTL=ctl10_%%d_%%T_%%U
echo %CTL%
@if "%DAY%" EQU "一" (
set CTL=ctl1_%%d_%%T_%%U
)
echo %DAY%
echo %CTL%
pause
---------------------------------------------------------------------------
输出结果,完全符合要求啊


D:\bk>echo ctl10_%d_%T_%U  
ctl10_%d_%T_%U

D:\bk>echo 一


D:\bk>echo ctl1_%d_%T_%U  
ctl1_%d_%T_%U

D:\bk>pause
请按任意键继续. . .
发表于 2012-3-5 01:32:24 | 显示全部楼层
回复 15# ksly1227


那就继续往上推啊
  1. @echo on
  2. set ORACLE_HOME=G:\oracle\product\10.2.0\db_1
  3. rem echo %ORACLE_HOME%
  4. set ORACLE_SID=test
  5. rem echo %ORACLE_SID%
  6. set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  7. rem echo %NLS_LANG%
  8. set PATH=%ORACLE_HOME%\bin
  9. rem echo %PATH%
  10. set RMAN=%ORACLE_HOME%\bin\rman.exe
  11. set date=%date:~0,10%
  12. set BACKUP_DIR=D:\bk\full\%date%
  13. IF NOT EXIST %BACKUP_DIR% (
  14. mkdir %BACKUP_DIR%
  15. )
  16. set RQ=%date:~4,10%
  17. set RMAN_LOG_FILE=%BACKUP_DIR%\rman_%RQ%.log
  18. set BACKUPTYPE=incremental level 0 database
  19. set NAME=full05_%%d_%%T_%%U
  20. set ARCHIVE=arch_%%d_%%T_%%U

  21. set DAY=%date:~13,14%
  22. echo,%DAY%
  23. if "%DAY%" EQU "一" (
  24. set CTL=ctl1_%%d_%%T_%%U
  25. )

  26. if "%DAY%" EQU "二" (
  27. set CTL=ctl2_%%d_%%T_%%U
  28. )

  29. if "%DAY%" EQU "三" (
  30. set CTL=ctl3_%%d_%%T_%%U
  31. )

  32. if "%DAY%" EQU "四" (
  33. set CTL=ctl4_%%d_%%T_%%U
  34. )

  35. if "%DAY%" EQU "五" (
  36. set CTL=ctl5_%%d_%%T_%%U
  37. )

  38. if "%DAY%" EQU "六" (
  39. set CTL=ctl6_%%d_%%T_%%U
  40. )

  41. if "%DAY%" EQU "日" (
  42. set CTL=ctl0_%%d_%%T_%%U
  43. )
  44. echo,%DAY%
  45. echo,%CTL%
  46. (
  47. echo run {
  48. echo allocate channel c1 type disk;
  49. echo backup current controlfile format '%BACKUP_DIR%\%CTL%';
  50. echo release channel c1;  
  51. echo }
  52. ) | %RMAN% target / msglog '%RMAN_LOG_FILE%'
复制代码
 楼主| 发表于 2012-3-5 01:41:47 | 显示全部楼层
老兄,上面以你的智慧来看没问题吧----哈哈确实没问题
把if语句取消掉,加上set CTL=ctl6_%%d_%%T_%%U
语句顺利执行,关键是把if语句单独拿出来执行没问题(上面以做过测试)组合到一起就有问题
 楼主| 发表于 2012-3-5 01:50:31 | 显示全部楼层
刚才有尝试啦一把  无解,寻求高高手来解决,不行的话我就把脚本多写几个,每个脚本的变量手动赋值
发表于 2012-3-5 03:06:42 | 显示全部楼层
回复 20# ksly1227

变量 date 处理及用法的错误.

这行代码
@set date=%date:~0,10%
将日期里包含的星期内容给截掉了, date 这个变量是系统提供的一个自动变量, 一般不应该对其赋值.
将这两行:
@set date=%date:~0,10%
@set BACKUP_DIR=D:\bk\full\%date%
改成一行:
set BACKUP_DIR=D:\bk\full\%date:~0,10%

这个截取方式:
set DAY=%date:~13,14%
中的14并不正确, 你的日期格式是 yyyy-mm-dd 星期几
共有14个字符, 从第 13 (~13 的意义)个字符后面开始, 一共截取 14 (,14 的意义) 个字符, 此处因为后面只有最后一个汉字数字可被截取, 所以结果不错, 但如果后面还有字符, 就会一样截取进去, 满 14 个为止.
正确的截取方式有:
%date:~13,1%      (从第 13 个字符后面开始, 截取 1 个字符)
%date:~-1,1%       (从倒数第一个字符开始截取 1 个字符)
%date:~-1%          (从倒数第一个字符开始截取后面的所有字符)

较多的 @ 可以省掉, 在代码较前面行里用 @echo off 来关闭回显
发表于 2012-3-5 10:43:48 | 显示全部楼层
回复 21# neorobin


老是这样搞,楼主啥时候能够学会自己分析问题啊
发表于 2012-3-5 10:44:49 | 显示全部楼层
回复 19# ksly1227


代码不是靠智慧写出来的,而是老老实实一步一步调试出来的。
 楼主| 发表于 2012-3-5 11:24:11 | 显示全部楼层
回复 21# neorobin


   高手不亏为高手,一针见血的就指出问题所在: date 这个变量是系统提供的一个自动变量, 一般不应该对其赋值,绝对不该赋值,对date赋值以后下面的if语句日期就没法判断
   谢谢脚本之家,谢谢热心的网友find、neorobin,这个问题终于解决啦,可以结贴啦。
 楼主| 发表于 2012-3-5 11:29:26 | 显示全部楼层
回复 23# find


    在window下这一个脚本在手,工作基本上就没有啥问题啦,大部分工作环境都是linux、aix,win生产环境中用的还是不多。
   哈哈,忘啦介绍下咱的工作啦也就是个dba,不求甚解就行,能把活干好就行,在win批处理下咱也不当专家,就用这一次。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 19:54 , Processed in 0.018152 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表