广告
返回顶部
首页 > 资讯 > 精选 >如何实现自动删除归档日志的脚本
  • 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://www.lsjlt.com/news/237621.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何实现自动删除归档日志的脚本
    这篇文章主要介绍如何实现自动删除归档日志的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自动删除归档日志的脚本(尤其是dataguard环境)已有 236 次阅读2011-12-16 21:02 |个人分类:or...
    99+
    2023-06-04
  • dg如何实现删除备库已经应用的归档日志脚本
    这篇文章主要介绍了dg如何实现删除备库已经应用的归档日志脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 #!/bin/bash #b...
    99+
    2022-10-18
  • Linux下如何实现Oracle归档日志自动清理脚本代码
    这篇文章主要介绍Linux下如何实现Oracle归档日志自动清理脚本代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:#!/bin/sh export BACK_DATE=`date +%Y%m%d` ex...
    99+
    2023-06-09
  • 配置rman来自动删除应用过的归档日志
    Configure Rman to Purge Application standby logs. Posted on   March 26, 2011   by...
    99+
    2022-10-18
  • 如何解决Oracle RMAN删除归档日志不释放的问题
    这篇文章主要为大家展示了“如何解决Oracle RMAN删除归档日志不释放的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Oracle RMAN删除...
    99+
    2022-10-18
  • 如何实现自动清除日期目录shell脚本
    小编给大家分享一下如何实现自动清除日期目录shell脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现自动清除日期目录shell脚本实例代码很多时候备份通常会...
    99+
    2023-06-09
  • Vbs脚本如何实现radmin删除自身
    这篇文章主要为大家展示了“Vbs脚本如何实现radmin删除自身”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vbs脚本如何实现radmin删除自身”这篇文章吧。代码如下:on err...
    99+
    2023-06-08
  • vbs如何实现AD日志开启脚本nableKerbLog的脚本
    这篇文章将为大家详细讲解有关vbs如何实现AD日志开启脚本nableKerbLog的脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Dim wsObj Set wsObj&...
    99+
    2023-06-08
  • VBS脚本和BAT批处理如何实现删除自身
    这篇文章给大家分享的是有关VBS脚本和BAT批处理如何实现删除自身的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。VBS脚本和BAT批处理自身删除的方法删除自身之:VBS 把下面的脚本保存为selfkill.vbs...
    99+
    2023-06-08
  • VBS脚本如何实现GUI图形界面和日志清除功能
    这篇文章给大家分享的是有关VBS脚本如何实现GUI图形界面和日志清除功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用方法:将下面的代码保存为rizhi.vbs双击运行即可,如果不行可能是杀毒软件的问题。可以...
    99+
    2023-06-08
  • sql server编写archive通用模板脚本如何实现自动分批删除数据
    这篇文章主要介绍了sql server编写archive通用模板脚本如何实现自动分批删除数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。做...
    99+
    2022-10-18
  • mysql中如何实现自动化脚本安装的shell脚本
    这篇文章将为大家详细讲解有关mysql中如何实现自动化脚本安装的shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。脚本处理逻辑流程图    ...
    99+
    2022-10-18
  • 如何实现CentOS开机自动运行自己的脚本
    这篇文章将为大家详细讲解有关如何实现CentOS开机自动运行自己的脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。操作系统:CentOS-5.2目标:开机自动挂载局域网中windows的共享目录一、ro...
    99+
    2023-06-10
  • 如何实现输出执行操作和打印日志的shell脚本
    这篇文章主要为大家展示了“如何实现输出执行操作和打印日志的shell脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现输出执行操作和打印日志的shell脚本”这篇文章吧。cat ...
    99+
    2023-06-09
  • 如何实现并分析Shell脚本apache日志中ip所在的地区
    这篇文章主要讲解了“如何实现并分析Shell脚本apache日志中ip所在的地区”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现并分析Shell脚本apache日志中ip所在的地区”吧...
    99+
    2023-06-09
  • PHP如何实现自动删除无用图片的程序
    这篇文章主要介绍“PHP如何实现自动删除无用图片的程序”,在日常操作中,相信很多人在PHP如何实现自动删除无用图片的程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何实现自动删除无用图片的程序”的疑...
    99+
    2023-07-05
  • 如何实现xp、2003开3389+非net创建管理用户+Shift后门+自删除的vbs脚本
    这篇文章主要介绍了如何实现xp、2003开3389+非net创建管理用户+Shift后门+自删除的vbs脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:on&nb...
    99+
    2023-06-08
  • 如何实现一键自动更改本机IP地址的BAT执行脚本
    这篇文章给大家分享的是有关如何实现一键自动更改本机IP地址的BAT执行脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。请把复制下面的脚本,另存为.bat文件,把其中的子网掩码,网关,IP,DNS等信息修改成你的...
    99+
    2023-06-08
  • 在Linux中如何通过expect工具实现脚本的自动交互
    这篇文章给大家介绍在Linux中如何通过expect工具实现脚本的自动交互,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。expect是一个自动化交互套件,是建立在tcl基础上的,能过通过脚本设置自动进行交互通信。1 安...
    99+
    2023-06-28
  • 如何实现全自动安装LNMP服务器环境的Shell脚本
    这篇文章主要介绍“如何实现全自动安装LNMP服务器环境的Shell脚本”,在日常操作中,相信很多人在如何实现全自动安装LNMP服务器环境的Shell脚本问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现全...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作