返回顶部
首页 > 资讯 > 精选 >如何实现自动删除归档日志的脚本
  • 455
分享到

如何实现自动删除归档日志的脚本

2023-06-04 11:06:30 455人浏览 独家记忆
摘要

这篇文章主要介绍如何实现自动删除归档日志的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自动删除归档日志的脚本(尤其是dataguard环境)已有 236 次阅读2011-12-16 21:02 |个人分类:or

这篇文章主要介绍如何实现自动删除归档日志的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

自动删除归档日志的脚本(尤其是dataguard环境)

已有 236 次阅读2011-12-16 21:02 |个人分类:oracle data guard

自动删除归档日志的脚本(尤其是dataguard环境)

在归档模式下,要时刻注意磁盘空间不要被归档撑爆,尤其在dataguard环境中,更是需要定期清理已经apply的日志,以免把硬盘撑爆。

在自动删除日志需要考虑几点:
1. 日志必须是已经被apply的
2. 日志备份已经被备份过的
3. 为了保证一定的管理余地,不要apply后马上删除,而应该根据实际情况设定一个删除策略。
4. 脚本要能够兼容primary和standby两种状态,且自动判断状态并执行不同的逻辑,否则在切换后,如果忘记修改脚本,那就可能杯具了。
以下是我用于删除归档日志的一个脚本,运行这个脚本需要输入一个参数来控制日志的保留时间。
这个脚本可用于primary端也可用于standby端,
1. 对于standby端,只要在保存周期内且被apply的归档都会被删除
2. 对于primary端,除了满足保存周期以及被apply条件外,还要保证归档已经被备份过才会被删除

对于dataguard环境,虽然备份可以选择在primary和standby端执行,但如果压力不是非常大的话,为了管理方便,更建议在primary端执行。

详细脚本如下:

[oracle@dwapp1 DBA]$ cat delete_arch.sh
#!/bin/bash

##################################################################################################################
#
# This script is to delete the arch logs for the standby database after it has applied the logs to the instance.
#
##################################################################################################################

source /home/oracle/.bash_profile

#####################
usage()
{ #usage
echo " USAGE: `basename $0` $retention"
exit 2
}


ArgNum=1

if [ ! $# -eq $ArgNum ];then
echo " "
echo " Incorrect parameter"
usage
fi


retention=$1

script=`basename $0`

dir=/tmp
tmpf=$dir/.$script.tmp

# get arcHived log list for standby database
function GetLogListForStandby
{
sqlplus -S /nolog <<EOF > $tmpf
connect / as sysdba
set head off
set feedback off
set pages 0
select name from(
select name,sequence#,row_number() over(partition by a.sequence# order by name) rn,
count(decode(applied,'YES',1,null)) over (partition by a.sequence#) cn from v$archived_log a
where completion_time <sysdate-$retention
and a.resetlogs_id in (
select i.resetlogs_id from v$database_incarnation i where status = 'CURRENT')
)
where rn=1 and cn=1
order by sequence#;
exit
EOF
return
}

function GetDBRole
{
sqlplus -S /nolog <<EOF
connect / as sysdba
set head off
set feedback off
set pages 0
select controlfile_type from v$database;
exit
EOF
return
}

# get archived log list for primary database
function GetLogListForPrimary
{
sqlplus -S /nolog <<EOF > $tmpf
connect / as sysdba
set head off
set feedback off
set pages 0
select name from(
select name,sequence#,row_number() over(partition by a.sequence# order by name) rn,
sum(backup_count) over(partition by a.sequence# ) bk_cnt,
count(decode(applied,'YES',1,null)) over (partition by a.sequence#) cn
from v$archived_log a where completion_time <sysdate-$retention
and a.resetlogs_id in (
select i.resetlogs_id from v$database_incarnation i where status = 'CURRENT')
)
where rn=1 and cn=1 and bk_cnt>0
order by sequence#;
exit
EOF
return
}

function GetDBRole
{
sqlplus -S /nolog <<EOF
connect / as sysdba
set head off
set feedback off
set pages 0
select controlfile_type from v$database;
exit
EOF
return
}



# check database role
DBROLE=`GetDBRole`

NUM=0

if [ $DBROLE = "CURRENT" ];then
echo "It's a primary database ......"
# get archived log list for primary
GetLogListForPrimary

elif [ $DBROLE = "STANDBY" ];then
echo "It's a standby database ......"
# get archived log list for standby
GetLogListForStandby
fi

echo "deleting archived log files ......"

if [ -n $tmpf ]; then
for ARCH in `cat $tmpf`;do
if [ -f $ARCH ];then
NUM=`expr $NUM + 1`
rm -f $ARCH
fi
done
fi

rm -f $tmpf

echo "finished deleting $NUM files"


使用测试:需要输入一个参数,用于设定保存周期。以下例子是删除3天前的归档

[oracle@dwapp1 DBA]$ ./delete_arch.sh 3
It's a primary database ......
deleting archived log files ......
finished deleting 12 files

设定定时任务自动执行

1 */4 * * * /home/oracle/DBA/delete_arch.sh 2


当然,对于非dataguard环境或者dataguard环境的primary端,更建议使用RMAN来管理归档了。

以上是“如何实现自动删除归档日志的脚本”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何实现自动删除归档日志的脚本

本文链接: https://lsjlt.com/news/237621.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何实现自动删除归档日志的脚本
    这篇文章主要介绍如何实现自动删除归档日志的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自动删除归档日志的脚本(尤其是dataguard环境)已有 236 次阅读2011-12-16 21:02 |个人分类:or...
    99+
    2023-06-04
  • Oracle下定时删除归档日志脚本
    一、报错信息前几天网站突然访问不了,并且报了如下错误:ora-27101: shared memory realm does not existora-01034: oracle not available...
    99+
    2024-04-02
  • DG归档日志删除脚本怎么写
    这篇文章主要介绍DG归档日志删除脚本怎么写,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!由于磁盘资源紧缺,需要一个归档日志处理的策略网上找了几个脚本,发现写的那么麻烦毛了,于是简单写...
    99+
    2024-04-02
  • dg如何实现删除备库已经应用的归档日志脚本
    这篇文章主要介绍了dg如何实现删除备库已经应用的归档日志脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 #!/bin/bash #b...
    99+
    2024-04-02
  • RMAN如何删除归档日志
    小编给大家分享一下RMAN如何删除归档日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!归档日志的信息是记录在控制文件中,所以不...
    99+
    2024-04-02
  • Linux下如何实现Oracle归档日志自动清理脚本代码
    这篇文章主要介绍Linux下如何实现Oracle归档日志自动清理脚本代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:#!/bin/sh export BACK_DATE=`date +%Y%m%d` ex...
    99+
    2023-06-09
  • DataGuard 备库归档日志自动删除配置
    1. 如果没有备份机制,想要实现备库归档自动删除,就需要使用快速恢复区(FRA)  检查当前备库归档的存放位置:  SQL> show parameter log_arc...
    99+
    2024-04-02
  • 当ORACLE归档日志满后如何正确删除归档日志
    当ORACLE归档日志满后如何正确删除归档日志 kepa520 2018-08-10 12:11:33 59...
    99+
    2019-04-01
    当ORACLE归档日志满后如何正确删除归档日志
  • ORACLE NBU调取oracle rman脚本备份归档不自动删除归档
          最近,遇到一个问题,ORACLE 11G RAC FOR LINUX 通过NBU调取rman备份脚本,问题是:备份脚本里明明写的 有备份时删除归档,但是,归档...
    99+
    2024-04-02
  • 配置rman来自动删除应用过的归档日志
    Configure Rman to Purge Application standby logs. Posted on   March 26, 2011   by...
    99+
    2024-04-02
  • Linux下Oracle归档日志自动清理脚本代码(sh)
    #!/bin/sh export BACK_DATE=`date +%Y%m%d` export BACKUP_PATH=/home/oracle/dbbak echo `mkdir -p ${BACKUP...
    99+
    2022-06-04
    脚本 代码 日志
  • 如何使用RMAN删除过期归档日志
    这篇文章主要介绍“如何使用RMAN删除过期归档日志”,在日常操作中,相信很多人在如何使用RMAN删除过期归档日志问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用RMAN...
    99+
    2024-04-02
  • 如何自动清理oracle 归档脚本
    如何自动清理oracle 归档脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 ...
    99+
    2024-04-02
  • Oracle归档日志自动清理作业实现
    在Oracle数据库开启了归档日志模式的情况下,归档日志会不断积累,如果不定时关注维护,可能会让归档日志把磁盘空间撑爆,并且若把归档目录设置在快速恢复区里,可在短时间内把该区撑爆,从而让数据库无法归档,数据库会挂起无法响应,影响严重!下面方...
    99+
    2016-07-25
    Oracle归档日志自动清理作业实现
  • Oracle手动删除归档日志厚,出现ORA-19571错误
    一、使用以下的命令清理了空间:1.   cd /orabak 2.   find . -type f&nb...
    99+
    2024-04-02
  • RMAN删除归档日志出现RMAN-0813错误
    疫情期间停课不停学,重庆思庄 oracle OCP/OCM 认证培训班火热报名中, “ 在线 ” 、 “ 宅 ” 家学习,虽然效果或进度不如面授,但目前情况特殊,我们也不要浪费掉这些大好时光!有什么不清楚的,我们随时关注或响应你们在线提...
    99+
    2021-12-26
    RMAN删除归档日志出现RMAN-0813错误
  • oracle中怎么删除过期的归档日志
    oracle中怎么删除过期的归档日志,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、对于 EXPIRED 状态的产生,相对于...
    99+
    2024-04-02
  • DG环境如何定时删除主备库归档日志
    这篇文章主要介绍DG环境如何定时删除主备库归档日志,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在DG主备库都执行该策略,原则上只有主库需要,但如果主备...
    99+
    2024-04-02
  • DG如何保证归档日志不能随意被删除
    这篇文章主要为大家展示了“DG如何保证归档日志不能随意被删除”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“DG如何保证归档日志不能随意被删除”这篇文章吧。保证归...
    99+
    2024-04-02
  • 如何实现自动清除日期目录shell脚本
    小编给大家分享一下如何实现自动清除日期目录shell脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现自动清除日期目录shell脚本实例代码很多时候备份通常会...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作