当前位置: 首页 > news >正文

Oracle Data Guard备库清理归档脚本

1 说明

我们知道在Oracle Data Guard架构中归档模式是必须打开的,主库将日志传输到备库,最终存放到备库的归档日志文件中。随着系统的运行,归档日志文件会不断累积,如果不及时清理,则会造成归档空间被写满,影响系统运行。

ADG环境一般都说主库用于写操作,备库用来做查询操作(11g及以后)。但实际上,由于各种原因,备库一般很少提供给业务系统查询使用,备份也不在上面做(不一定对,不过至少在我参加工作两年来,换了两份工作里是这样的)。

所以,备库由于存在感很低,容易发生归档空间爆满的现象,备库就无法接收主库的归档。如果发现时已经过去了很久,并且主库的归档已经删除,出现GAP,这时候备库就要做恢复了。

因此,我们在搭建好环境后,非常有必要加强对备库的监管,并且配置一个定期清理归档日志的定时任务,就可以避免上述情况发生。

2 准备工作

准备工作主要是检查DG同步情况和创建脚本目录。

2.1 DG同步情况检查

一、检查数据库角色

确认主备库分别是哪个。

select db_unique_name,open_mode,switchover_status,database_role from v$database;

二、检查归档应用情况

在主备库都执行语句来查看归档日志是否一致。

set lines 200;
col name for a70
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select *from (select recid,name,thread#,sequence#,resetlogs_time,first_time,applied,statusfrom v$archived_logorder by sequence# desc)where rownum <= 20;

三、查看是否有 GAP

在主库上查询是否有GAP,为空则是没有。

select thread#, low_sequence#, high_sequence# from v$archive_gap;

四、查看是否有传输错误

主库查看归档传输是否有报错。

select dest_name, status, type, error from v$archive_dest_status where dest_name in('LOG_ARCHIVE_DEST_1','LOG_ARCHIVE_DEST_2'); 

五、查看进程

主库主要看 LNS 进程,此进程负责将主数据库的重做日志条目传输到备用数据库。备库主要看 MRP0 进程,此进程负责将接收到的归档日志应用到备用数据库上,以维持与主数据库的同步。MRP进程是ADG中的关键组件,它确保备用数据库的数据与主数据库保持一致。

select process ,status , sequence# from v$managed_standby;

六、检查备库lag

set lines 200
col name for a30
col value for a30
select * from v$dataguard_stats;

2.2 创建脚本目录

根据自己的习惯,选择一个路径创建脚本目录,oracle用户操作:

# su - oracle
$ cd /home/oracle
$ mkdir -p scripts/deleted_dgarch/src
$ mkdir -p scripts/deleted_dgarch/log
$ mkdir -p scripts/deleted_dgarch/sql

3 脚本

3.1 脚本说明

一、脚本实现的功能是

  • 清理一周前备库已经应用了的归档日志文件。

二、脚本实现逻辑是

  1. 获取最近应用的归档日志时间;
  2. RMAN基于这个时间删除一周前的归档日志文件。

3.2 部署脚本

一、deleted_dgarch.sql

此sql脚本文件的作用是获取最近应用的归档日志时间,并拼接成RMAN删除归档日志的脚本,脚本输出到/home/oracle/scripts/deleted_dgarch/sql/deleted_dgarch.rman。

创建脚本文件:

$ su - oracle
$ cd /home/oracle/scripts/deleted_dgarch/sql
$ vi deleted_dgarch.sql
$ chmod +x deleted_dgarch.sql

添加以下内容:

set lines 200
set echo off feedback off heading off termout off
spool /home/oracle/scripts/deleted_dgarch/sql/deleted_dgarch.rman
select 'delete noprompt archivelog all completed before ' || '"to_date(''' || to_char(max(first_time-7),'yyyy-mm-dd hh24:mi:ss') || ''',' || '''yyyy-mm-dd hh24:mi:ss' || ''')";' scripts from v$archived_log where applied = 'YES' and name is not null;
spool off
exit;

脚本测试:

# 1 运行脚本
$ sqlplus / as sysdba @/home/oracle/scripts/deleted_dgarch/sql/deleted_dgarch.sql# 2 查看结果,可以将脚本拿到rman里执行看看有没有报错
$ cat deleted_dgarch.rman
delete noprompt archivelog all completed before "to_date('2024-09-20 02:00:02','yyyy-mm-dd hh24:mi:ss')";

二、deleted_dgarch.sh

此脚本的作用是调用deleted_dgarch.sql,创建脚本文件:

$ cd /home/oracle/scripts/deleted_dgarch/src
$ vi deleted_dgarch.sh
$ chmod +x deleted_dgarch.sh

脚本内容如下:

#!/bin/bashif [ -f $HOME/.bash_profile ];
then. $HOME/.bash_profile
fi# ---------------------------------------------------------------
# environment variables
# ---------------------------------------------------------------export ORACLE_SID=orcladg
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1DATE=`date +'%Y%m%d%H'`SCRBASE=/home/oracle/scripts/deleted_dgarch
SCRDIR=${SCRBASE}/src
SQLDIR=${SCRBASE}/sql
LOGDIR=${SCRBASE}/logLOG_FILE=${LOGDIR}/${DATE}_${ORACLE_SID}_DELETED_DGARCH.log# ---------------------------------------------------------------
# Create RMAN delete archive log script
# ---------------------------------------------------------------echo -e "\n****** Create RMAN delete archive log script On `date +'%F %T'` ******\n" >> ${LOG_FILE}sqlplus / as sysdba @${SQLDIR}/deleted_dgarch.sqlcat ${SQLDIR}/deleted_dgarch.rman >> ${LOG_FILE}# ---------------------------------------------------------------
# RMAN delete archive log
# ---------------------------------------------------------------echo -e "\n****** RMAN delete archive log On `date +'%F %T'` ******\n" >> ${LOG_FILE}rman target / cmdfile=${SQLDIR}/deleted_dgarch.rman msglog ${LOG_FILE} append# ---------------------------------------------------------------
# Finish
# ---------------------------------------------------------------echo -e "\n****** RMAN delete archive log Finished On `date +'%F %T'` ******\n" >> ${LOG_FILE}exit 0

4 脚本测试

4.1 运行脚本

$ cd /home/oracle/scripts/deleted_dgarch/src
$ ./deleted_dgarch.sh

image.png

4.2 查看日志

$ cd /home/oracle/scripts/deleted_dgarch/log
$ more 2024092613_orcladg_DELETED_DGARCH.log

image.png

5 创建定时任务

创建一个定时任务,可以每天执行这个清理脚本。删除归档的操作对资源耗费不高,可以每天多执行几次,特别是在日志切换比较频繁的数据库中,可以极大平坦每次占用的资源,降低系统负载,避免性能抖动。

$ su - oracle
$ crontab -e

添加以下内容:

# --------------------------------------------------------------------
# Delete Archive Log
# --------------------------------------------------------------------
0 0,6,12,18 * * *  sh /home/oracle/scripts/deleted_dgarch/src/deleted_dgarch.sh >/dev/null 2>&1

每6小时一次,在午夜、早上6点、中午和下午6点执行一次清理任务。

相关文章:

  • Linux递归找出目录下最近被修改文件(最近一段时间内被修改过的最新文件)(最近修改文件、最新文件、查找文件)(监控目录、监控mysql文件)
  • 完美无敌Oracle RMAN备份脚本
  • VBA解除Excel工作表保护
  • spring装配笔记
  • Matplotlib 使用 LaTeX 渲染图表中的文本、标题和数学公式
  • 【经验分享】自动化测试框架实战
  • 什么是IPv6
  • 解决pycharm中matplotlab画图不能显示中文的错误
  • SpirngBoot核心思想之一IOC
  • Mac通过ssh连接工具远程登录服务器( Royal TSX安装及使用)
  • 深度学习:(七)梯度下降法在神经网络中的应用
  • 基于微信小程序的旧衣回收系统
  • Vue.js组件开发
  • 如何将精益思维应用于智能音箱的产品设计?
  • 如何在算家云搭建MVSEP-MDX23(音频分离)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • centos安装java运行环境jdk+tomcat
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • egg(89)--egg之redis的发布和订阅
  • JavaScript中的对象个人分享
  • mysql_config not found
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何解决微信端直接跳WAP端
  • 详解NodeJs流之一
  • 一、python与pycharm的安装
  • 一道面试题引发的“血案”
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • zabbix3.2监控linux磁盘IO
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 移动端高清、多屏适配方案
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​业务双活的数据切换思路设计(下)
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (void) (_x == _y)的作用
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (二)换源+apt-get基础配置+搜狗拼音
  • (过滤器)Filter和(监听器)listener
  • (四)汇编语言——简单程序
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)Python 垃圾回收机制
  • (学习总结16)C++模版2
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)利用webkit抓取动态网页和链接
  • .net core + vue 搭建前后端分离的框架
  • .NET IoC 容器(三)Autofac
  • .NET Project Open Day(2011.11.13)
  • .Net Web窗口页属性
  • .NET 命令行参数包含应用程序路径吗?
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net接口调试与案例
  • .NET牛人应该知道些什么(2):中级.NET开发人员