CSDN博客

img penitent

怎么样正确的删除备用数据库的日志

发表于2004/9/27 11:27:00  3507人阅读

分类: 技术

主数据库传送到备用数据库的归档我们是采用脚本定期删除的,早期的脚本为;
#!/bin/sh
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2
export ORACLE_SID=tbdb1in1
export BDUMP=/opt/oracle/admin/tbdb1/bdump
export HOME=/home/oracle
export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin
grep "Media Recovery Log" $BDUMP/alert_${ORACLE_SID}.log|awk '{print $4}'|sed -e 's/^/rm /' >$HOME/worksh/rmarchlog.sh
chmod +x $HOME/worksh/rmarchlog.sh

$HOME/worksh/rmarchlog.sh
cd $BDUMP

cat alert_${ORACLE_SID}.log >>alert_${ORACLE_SID}.log.bak
>alert_${ORACLE_SID}.log

rm -f $HOME/worksh/rmarchlog.sh

但是,马上就发现问题了,
1、是如果一个日志开始恢复,但是还没有恢复完成的时候,其实在alert日志中已经记载了Media Recovery Log的信息,如果这个时候,我打开(open read only)来查询数据库,这个日志实际上没有恢复完,但是,因为在alert日志中有其信息,所以,日志删除程序就会误删这个日志。
2、如果删除成功,马上运行该脚本将产生一个错误,因为alert日志与归档目录都没有东西了,这个错误虽然不影响什么,但是看上去也不好。

因为前几次多删除了领头的日志,而主库也备份并删除了,最后不得不从备份中恢复该日志,所以,改写了日志删除程序脚本。
#!/bin/sh
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2
export ORACLE_SID=tbdb2in1
export BDUMP=/opt/oracle/admin/tbdb2/bdump
export HOME=/home/oracle
export PATH=$PATH:$ORACLE_HOME/bin:/sbin:/usr/sbin
grep "Media Recovery Log" $BDUMP/alert_${ORACLE_SID}.log|grep 1_|sed '$d'|awk '{print $4}'|sed -e 's/^/rm /' > $HOME/worksh/rmarchlo
g.sh
grep "Media Recovery Log" $BDUMP/alert_${ORACLE_SID}.log|grep 1_|sed -n '$p' > $HOME/logs/logtmp.log
grep "Media Recovery Log" $BDUMP/alert_${ORACLE_SID}.log|grep 2_|sed '$d'|awk '{print $4}'|sed -e 's/^/rm /' >> $HOME/worksh/rmarchl
og.sh
grep "Media Recovery Log" $BDUMP/alert_${ORACLE_SID}.log|grep 2_|sed -n '$p' >> $HOME/logs/logtmp.log

chmod +x $HOME/worksh/rmarchlog.sh

$HOME/worksh/rmarchlog.sh
cd $BDUMP

cat alert_${ORACLE_SID}.log >>alert_${ORACLE_SID}.log.bak
cat $HOME/logs/logtmp.log > alert_${ORACLE_SID}.log

rm -f $HOME/worksh/rmarchlog.sh

改写后的脚本,保留每个线程中最后一个日志不删除,并返回到alert日志中,留到下一次删除,解除了删除错误(多删除一个)与删除后马上运行该脚本产生错误的问题。

0 0

相关博文

我的热门文章

img
取 消
img