资讯专栏INFORMATION COLUMN

Windows平台下Oracle数据库备份脚本

tomorrowwu / 2382人阅读

摘要:以下脚本是我在项目工作中使用的备份脚本,脚本都是自己写的。简介此套脚本可以实现对数据库实现全备份和增量备份。综合以上两种利弊,比较好的方式是在出现丢失备份或的情况下,通知管理员处置,手工处理之后备份脚本运行恢复正常。

以下脚本是我在项目工作中使用的备份脚本,脚本都是自己写的。但在使用过程中,感觉还有提供空间,我这个人有点懒,所以想用将脚本“开源”出来的方式督促自己完善这一套脚本。大家如果对此脚本有什么建议,随时可以提出来大家一起提高。

简介

此套脚本可以实现对oracle数据库实现全备份和增量备份。主要由rman_level0.cmd和rman_level1.cmd组成。
其中,rman_level0.cmd引用rman_level0.rcv作为rman命令输入,rman_level1.cmd引用rman_level1.rcv作为rman命令输入。

此套脚本使用的目录结构如下:

其中,

archlog 存放归档日志备份

cntrfile 控制文件备份

data 数据库文件备份

log 备份日志

scripts 备份脚本相关

脚本内容

全备脚本

rman_level0.bat

rman target / CMDFILE "D:ackup
man_backupscripts
man_level0.rcv" LOG D:ackup
man_backuploglevel0_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

rman_level0.rcv

run {
      sql "alter system archive log current";
      allocate channel c1 type disk;
      backup as compressed backupset
      incremental level 0
      format "D:ackup
man_backupdatalevel0_%T_%t_s%s_p%p" database
      plus archivelog format "D:ackup
man_backuparchlogarchlog_%T_t%t_s%s_p%p" delete input;
      backup format "D:ackup
man_backupcntrfilecontrolfile_%T_s%s_p%p" current controlfile;
      release channel c1;
      crosscheck backup;
      delete noprompt obsolete;
      crosscheck archivelog all;
}
exit;

增量备份脚本

rman_level1.cmd

rman target / CMDFILE "D:ackup
man_backupscripts
man_level1.rcv" LOG D:ackup
man_backuploglevel1_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

rman_level1.rcv

run {
      sql "alter system archive log current";
      allocate channel c1 type disk;
      backup as compressed backupset
      incremental level 1
      format "D:ackup
man_backupdatalevel1_%T_%t_s%s_p%p" database
      plus archivelog format "D:ackup
man_backuparchlogarchlog_%T_t%t_s%s_p%p" delete input;
      backup format "D:ackup
man_backupcntrfilecontrolfile_%T_s%s_p%p" current controlfile;
      release channel c1;
      crosscheck backup;
      delete noprompt obsolete;
      crosscheck archivelog all;
}
exit;
存在的问题及解决

rman log中日期字符串的问题

目前日期字符串是使用从date和time命令的输出中截取需要的字符,组成需要的字符串。

第1种情况,当time在0-9时之间时,字符串输出如下:

C:UsersYangJia>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%t
ime:~6,2%
20140119_ 10802

第2中情况,当time在10-23之间时,字符串输出如下:

C:UsersYangJia>echo %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%t
ime:~6,2%
20140119_230953

这个时候问题就出现了,当运行脚本时属于第一种情况,脚本会认为LOG参数在"_"之后就结束了,导致最终生成的日志文件名出现不完整的情况。
解决此问题有两个思路,一是将多出来的空格去掉,二是让cmd认为脚本并不是从空格处就结束 了。
以下针对两种思路给出方法:

第一种思路:
将log文件名使用%filename%变量替换,设置%filename%变量之前,对日期格式进行判断,然后设置%filename%内容:

set logfile=level0_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
if "%time:~0,1%" == " " ^
set logfile=level0_%date:~0,4%%date:~5,2%%date:~8,2%_0%time:~1,1%%time:~3,2%%time:~6,2%.log

这部分解决有参考http://stackoverflow.com/questions/1192476/windows-batch-script-format-date-and-time

rman中删除无效备份和archivelog的考虑

rman中删除无效(expired)备份和archivelog的方式一般步骤是:
1. crosscheck backup &crosscheck archivelog all
2. delete expired backup;
3. delete expired archivelog;

如果将以上操作加入到脚本中,无效(expired)备份和archivelog会被自动清理掉,这样可能就会在不知情的情况下导致丢失recovery window中的片段,导致recovery window不完整。

如果不加入备份脚本,在有无效(expired)备份和归档日志的情况下,就会出现备份archivelog失败导致整个备份脚本运行失败,可能会导致归档日志不能自动清除将磁盘空间占满。

综合以上两种利弊,比较好的方式是:在出现丢失备份或archivelog的情况下,通知管理员处置,手工处理之后备份脚本运行恢复正常。即使真的有archivelog丢失,在管理员已知晓的情况下,可以规避对恢复窗口的影响。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8683.html

相关文章

  • WindowsOracle定时备份(全量备份)

    摘要:关于下全量备份的文章,很多网站都有,写下本文不过是为了以后方便查找,不用再到处找。自动删除天前的备份。设置用户名密码和要备份的数据库创建备份目录删除天前的备份。 关于Windows下oracle全量备份的文章,很多网站都有,写下本文不过是为了以后方便查找,不用再到处找。 以下些许内容有所参考到其他人所写内容,这里无意冒犯,本文引用内容部分会附上参考地址,还望原作者见谅。 备份脚本 新建...

    Pines_Cheng 评论0 收藏1
  • WindowsOracle定时备份(全量备份)

    摘要:关于下全量备份的文章,很多网站都有,写下本文不过是为了以后方便查找,不用再到处找。自动删除天前的备份。设置用户名密码和要备份的数据库创建备份目录删除天前的备份。 关于Windows下oracle全量备份的文章,很多网站都有,写下本文不过是为了以后方便查找,不用再到处找。 以下些许内容有所参考到其他人所写内容,这里无意冒犯,本文引用内容部分会附上参考地址,还望原作者见谅。 备...

    FrancisSoung 评论0 收藏0
  • WindowsOracle定时备份(全量备份)

    摘要:关于下全量备份的文章,很多网站都有,写下本文不过是为了以后方便查找,不用再到处找。自动删除天前的备份。以格式取出当前时间。设置用户名密码和要备份的数据库创建备份目录删除天前的备份。 关于Windows下oracle全量备份的文章,很多网站都有,写下本文不过是为了以后方便查找,不用再到处找。 以下些许内容有所参考到其他人所写内容,这里无意冒犯,本文引用内容部分会附上参考地址,还望原作者见...

    zzbo 评论0 收藏0
  • DBASK问答集萃第三期

    摘要:问答集萃接下来,我们分享本期整理出的问题和诊断总结,供大家参考学习,详细的诊断分析过程可以通过标题链接跳转到小程序中查看。诊断结论请先尝试收集系统数据字典统计信息。诊断结论一般后会出现这种情况,但是不会出现几百个的情况。 引言近期我们在DBASK小程序增加了众多专栏,其中包括盖国强、杨廷琨、罗海雄、张乐奕、黄廷忠、崔华、熊军、李真旭、何剑敏等专家栏目,还有2019年6月SCN兼容性问题...

    leap_frog 评论0 收藏0
  • Oracle据库】手滑删错数据,一步步教你如何挽救?

    摘要:前言常在河边走,哪能不湿鞋今天有客户联系说误更新数据表,导致数据错乱了,希望将这张表恢复到一周前的指定时间点。 前言 常在河边走,哪能不湿鞋? 今天有客户联系说误更...

    马龙驹 评论0 收藏0

发表评论

0条评论

tomorrowwu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<