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,status
		  from v$archived_log
		 order 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/bash

if [ -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_1

DATE=`date +'%Y%m%d%H'`

SCRBASE=/home/oracle/scripts/deleted_dgarch
SCRDIR=${SCRBASE}/src
SQLDIR=${SCRBASE}/sql
LOGDIR=${SCRBASE}/log

LOG_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.sql

cat ${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点执行一次清理任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/885264.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java项目之社区智慧养老监护管理平台设计与实现源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的社区智慧养老监护管理平台设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 社区…

Linux工具的使用——yum和vim的理解和使用

目录 linux工具的使用1.linux软件包管理器yum1.1yum的背景了解关于yum的拓展 1.2yum的使用 2.Linux编辑器-vim使用2.1vim的基本概念2.2vim的基本操作2.3命令模式命令集2.3.1关于光标的命令&#xff1a;2.3.2关于复制粘贴的命令2.3.3关于删除的命令2.3.4关于文本编辑的命令 2.4插…

MAC M1 安装brew 配置环境变量,安装dart

一. 下载 brew 1. 终端输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 2. 如遇到下载失败情况&#xff0c;需要VPN/代理 curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 8 m…

【2025】springboot基于微信小程序记账本的设计与实现(源码+文档+调试+答疑)

文章目录 前言一、主要技术&#xff1f;二、项目内容1.整体介绍&#xff08;示范&#xff09;2.运行截图3.系统测试 总结更多项目 前言 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;记账本小…

SpringBoot+Thymeleaf发票系统

> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录&#xff0c;权限控制&#xff0c;客户管理&#xff0c;发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…

基于SpringBoot的休闲娱乐代理售票系统设计与实现

1.1研究背景 21世纪&#xff0c;我国早在上世纪就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统&#xff0c;由从今传统的管理模式向互联网发展&#xff0c;如今开发自己的系统是理所当然的。那么开发休闲娱乐代理售票…

探索私有化聊天软件:即时通讯与音视频技术的结合

在数字化转型的浪潮中&#xff0c;企业对于高效、安全、定制化的通讯解决方案的需求日益迫切。鲸信&#xff0c;作为音视频通信技术的佼佼者&#xff0c;凭借其强大的即时通讯与音视频SDK&#xff08;软件开发工具包&#xff09;结合能力&#xff0c;为企业量身打造了私有化聊天…

Linux 应用层自定义协议与序列化

文章目录 一、应用层1、协议2、序列化 && 反序列化3、通过Json库进行数据的序列化 && 反序列化Json::Value类Json::Reader类Json::Writer类 二、为什么read、write、recv、send和Tcp支持全双工&#xff1f;发数据的本质&#xff1a;tcp支持全双工通信的原因&am…

docker学习笔记(1.0)

docker命令 下载镜像相关命令 检索&#xff1a;docker search 比如&#xff1a;docker search nginx 是查看有没有nginx镜像 后面的OK表示是不是官方镜像&#xff0c;如果有就是官方镜像&#xff0c;如果没有就是第三方的。 下载&#xff1a;docker pull 比如&#xff1a…

联宇集团:如何利用CRM实现客户管理精细化与业务流程高效协同

在全球化的浪潮中&#xff0c;跨境电商正成为国际贸易的新引擎。作为领先的跨境电商物流综合服务商&#xff0c;广东联宇物流有限公司(以下称“联宇集团”)以其卓越的物流服务和前瞻的数字化战略&#xff0c;在全球市场中脱颖而出。本文将基于联宇集团搭建CRM系统的实际案例&am…

Spring Boot 进阶- Spring Boot如何加载自定义的配置文件?

通过之前的分析,我们知道,在Spring Boot 应用默认启动的时候会自动加载resource目录下的application.yml 或者是加载bootstrap.yml 配置文件。这些都是默认的。 在有些情况下,为了可以更好地区分不同组件的配置文件,我们需要自定义一个配置文件,我们知道,自己创建的配置文…

DDL 超时,应该如何解决 | OceanBase 用户问题集萃

问题背景 在OceanBase的社区问答里常看到有用户发帖提出DDL超时的问题&#xff0c; 如“执行 DDL 超时&#xff0c;为何调大超时时间不生效&#xff1f;” 。但很多帖子的回答都没有完美解决。因此&#xff0c;这里把相关的解决思路在这里分享给大家。 帖子里对这类问题的描述…

Apache DolphinScheduler-1.3.9源码分析(一)

引言 随着大数据的发展&#xff0c;任务调度系统成为了数据处理和管理中至关重要的部分。Apache DolphinScheduler 是一款优秀的开源分布式工作流调度平台&#xff0c;在大数据场景中得到广泛应用。 在本文中&#xff0c;我们将对 Apache DolphinScheduler 1.3.9 版本的源码进…

低空经济时代:无人机飞行安全要点详解

随着低空经济的蓬勃发展&#xff0c;无人机&#xff08;UAV&#xff09;在农业、航拍、物流、应急救援等多个领域的应用日益广泛。然而&#xff0c;无人机的安全飞行不仅关乎任务的成功与否&#xff0c;更直接关系到地面人员、财产及空中交通的安全。本文将从飞行前检查、环境评…

react crash course 2024(7) react router dom

安装 npm i react-router-dom 引入 import {Route,createBrowserRouter,createRoutesFromElements,RouterProvider} from react-router-dom 在app.jsx const router createBrowserRouter(createRoutesFromElements(<Route index element {<h1>My App</h1>…

Centos 8安装VNC及多用户配置详细教程

Centos 8安装VNC及多用户配置详细教程 参考一、安装前准备二、安装三、创建新用户和设置VNC密码四、创建VNC系统服务文件五、多用户映射和配置VNC六、客户端用VNC Viewer登录 参考 1、参考1&#xff1a; VNC安装英文说明&#xff08;英文说明有误且仅适合单用户&#xff09;&a…

tauri中加载本地文件图片或者下载网络文件图片后存储到本地,然后通过前端页面展示

有一个需求是需要将本地上传的文件或者网络下载的文件存储到本地&#xff0c;并展示在前端页面上的。其实如果只是加载本地文件&#xff0c;然后展示还是挺简单的&#xff0c;可以看我的文章&#xff1a;tauri程序加载本地图片或者文件在前端页面展示-CSDN博客 要想实现上述需…

[OpenGL]使用OpenGL加载obj模型、绘制纹理

一、简介 本文介绍了如何使用OpenGL加载obj模型&#xff0c;绘制简单纹理。 在加载obj模型时&#xff0c;使用glm库确定对顶点进行坐标变换的MVP(model, view, projection)矩阵。 在绘制纹理时&#xff0c;使用stb_image.h头文件加载纹理图片&#xff0c;生成纹理。 按照本文…

108.WEB渗透测试-信息收集-FOFA语法(8)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;107.WEB渗透测试-信息收集-FOFA语法&#xff08;7&#xff09; 指挥系统的后台&#xff…

排序题目:重新排列后的最大子矩阵

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;重新排列后的最大子矩阵 出处&#xff1a;1727. 重新排列后的最大子矩阵 难度 7 级 题目描述 要求 给定一个大小为 m n \texttt{m} \times \tex…