怎么样正确的删除备用数据库的日志
2004-09-27 11:27
441 查看
主数据库传送到备用数据库的归档我们是采用脚本定期删除的,早期的脚本为;
#!/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日志中,留到下一次删除,解除了删除错误(多删除一个)与删除后马上运行该脚本产生错误的问题。
#!/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日志中,留到下一次删除,解除了删除错误(多删除一个)与删除后马上运行该脚本产生错误的问题。
相关文章推荐
- 如何正确删除Exchange默认数据库
- 正确删除MySQL BIN-LOG 日志实操
- sql 语句删除数据库日志
- 当ORACLE归档日志满后如何正确删除归档日志
- 删除redo所有日志,数据库无法启动
- Sql2000 和 Sql2005 删除或缩小数据库日志的方法
- 数据库日志删除
- 如何删除数据库的日志 参数命令
- 如何正确删除归档日志
- 删除MSSQL2005的数据库日志文件
- 对于SQL Server 2008删除或压缩数据库日志的方法
- RMAN-08137:警告:归档日志未删除,因为备用或上游捕获进程需要它
- 当ORACLE归档日志满后如何正确删除归档日志
- 清空删除mssql数据库日志原文网址:http://admin.88443.net/article.
- SQLserver 删除数据库日志SQL
- 删除SQL SERVER数据库日志方法-Mssql数据库
- 删除sqlserver数据库日志和没有日志的数据库恢复办法
- 恢复已删除日志文件的数据库
- 当ORACLE归档日志满后如何正确删除归档日志
- 【转】正确删除归档日志文件