某银行的数据中心,核心不是Orcale,今年在迁移到Oracle,为此我也做了大量的准备工作,当然这是题外话。这个数据中心可以说是整个行的数据集中地点,从初步搭建到目前的成型,大部分的Oracle数据库以及衍生的相关产品都有我手上实施以及维护的汗水,但是整个中心的配套项目并没有跟上系统的脚步,几十套系统上线,再更新,数据库换平台,性能问题,冗余问题,安全问题,一个个在日常的维护工作中发生。举个例子,有一批的40多套Oracle数据库,10g版本,由行里的工程师安装,在老鸟看来是很简单的工作,但是对于一个赶进度的经理来讲就是一个粗糙的担心过程,在最后一步2个脚本没执行,40多套清一色都没有执行!这在我后期升级数据库的版本工作中,带来不小的麻烦,因为2天之内要升级40多套小系统的Oracle版本!对没错,测试 + 生产!类似这类问题等,还有很多~
配套的设施不完善,比如由于没有备份系统,成型的备份机制,在多次报告(china 的流程)陈述严重性后,经过十多个月,终于要盼来备份系统了~但是这个还只是在招标。为此,我不得不为众多的Oracle Db考虑归档日志的事情(因为我把所有数据库置为归档模式了!TAT!小系统也不放过),客户对一些系统有设置exp的导出备份,由于众多因素,设备也好,人力也好,很多东西不是我们工程师能控制的,所以我都争取保证每个没有备份的db置为归档模式下,采取保留archivelog 最大时间的方式,一般视为空间而定(最多30天吧,也有设置rman备份保留机制,但是只被允许在部分系统上设置),这里就把我把通用的Oracle归档定时清楚脚本粘上来,算是一个小解决方案吧~
步骤一:
在root用户下设置crontab的任务,脚本方式。当然了如果配置了Oracle用户的crontab的执行权限也可以使用oracle相关用户。
0 2 * * * /oracle/delete_arch01.sh >> /oracle/log/`/bin/date +”%Y%m%d”`.log 2>&1
步骤二:
设置脚本delete_arch01.sh,这个脚本的作用是调动oralce用户的归档清除shell脚本,具体如下:
脚本1.
需要注意的是脚本的权限,目录的权限,该脚本为root用户拥有
#delete_arch01.sh #user:root #It will excute at am 02:00 #user for delete archivelog of oracle database su - oracle -c /oracle/delete_arch02.sh
步骤三:
该脚本为oracle用户拥有
设置脚本delete_arch02.sh,这个脚本的作用是登陆rman,使用rman清除7天前的归档日志,
这样做和rm比起来,
一方面可以避开归档日志的刷选问题,
一方面可以将控制文件的相关物理信息更新(以避免dg或者rman中报错)
脚本2.
#delete_arch_02.sh #user:oracle #It used by delete_arch_01.sh. #export ORACLE_SID=xybank rman target / log=/oracle/log/rman/sxbank_`/bin/date +"%Y%m%d"`_rman.log < <eof crosscheck archivelog all; delete noprompt expired archivelog all; #delete noprompt obsolete; 清除过期的备份 delete noprompt archivelog all completed before 'sysdate - 7'; exit; EOF
鲁大师,delete_arch_02.sh后面的内容怎么显示不出来?
没看到么? 代码块问题,已经改好了
挺不错,收了。
要是有windows就更好了!
windows上的用bat,和ncv一样的,只是把shell改下