记一次Oracle归档日志异常增长问题的排查过程

Oracle归档日志是Oracle数据库的重要功能,用于将数据库的重做日志文件(Redo Log)保存到归档日志文件(Archive Log)中。归档日志的作用是提供数据库的备份和恢复功能,以及支持数据库的持续性和数据完整性。
当数据库处于归档模式时,数据库引擎会将已经写满的重做日志文件保存到归档日志文件中,而不是覆盖已有的重做日志。这样可以确保数据库的完整性,并且可以使用归档日志文件进行数据库的恢复操作。
归档日志对于数据库的备份和恢复非常重要。通过定期备份归档日志文件,可以保证数据库在发生故障时能够进行恢复。同时,归档日志还允许将数据库恢复到特定的时间点,以满足特定业务需求。

基础操作

在Oracle数据库中,可以通过以下步骤来设置和查看归档日志空间:

  1. 首先,确认数据库是否处于归档模式。可以通过以下SQL语句查询:
SQL> SELECT log_mode FROM v$database;
LOG_MODEARCHIVELOG

如果log_mode的值为ARCHIVELOG,则数据库处于归档模式;如果值为NOARCHIVELOG,则数据库未启用归档模式。

  1. 如果数据库未启用归档模式,可以通过以下SQL语句将其切换到归档模式:
    修改归档模式的操作只能在 mount 状态下进行,不能处于 open 状态
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 3290345472 bytes
Fixed Size                  2180224 bytes
Variable Size            2382367616 bytes
Database Buffers          889192448 bytes
Redo Buffers               16605184 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
  1. 确认数据库已切换到归档模式后,可以设置归档日志空间的大小。可以通过以下SQL语句设置归档日志空间的大小为50MB(根据需求进行调整):
    52428800 = 50 * 1024 * 1024
SQL> alter system set db_recovery_file_dest_size=  52428800;
系统已更改。
  1. 使用以下SQL语句查询当前归档日志空间的使用情况:
select name,space_limit / 1024 / 1024 / 1024 || 'GB' as 空间限制,space_used / 1024 / 1024 / 1024 || 'GB' 已使用from v$recovery_file_dest

这将显示归档日志目标的名称、空间限制和已使用的空间。

问题发生

下面进入对一次因归档日志空间占满,导致系统停止服务的故障在某个阳光明媚的周末发生后的处理过程。

  1. 系统停止响应,数据库登录有以下提示:
ORA-00257:archiver error. Connect internal only,until freed
  1. 很明显,归档日志满了,立即删除归档日志,保留最近3天。
rman
RMAN> connect target 用户名/密码;
连接到目标数据库: ORCL (DBID=1616110362)
RMAN> delete archivelog until time 'sysdate-3';
  1. 问题未解决,查看归档空间占用情况。
select name,space_limit / 1024 / 1024 / 1024 || 'GB' as 空间限制,space_used / 1024 / 1024 / 1024 || 'GB' 已使用from v$recovery_file_dest
  1. 发现占用空间未释放,接着删除所有归档:
RMAN> delete archivelog all;
  1. 系统恢复。过了几个小时,问题再次发生。
  2. 再次删除所有归档日志,系统恢复,开始排查问题原因。

排查过程

  1. 按天统计
select to_char(COMPLETION_TIME, 'yyyymmdd'), count(*)from v$archived_log twhere COMPLETION_TIME > sysdate - 7group by to_char(COMPLETION_TIME, 'yyyymmdd')order by to_char(COMPLETION_TIME, 'yyyymmdd');

这是一个查询语句,用于查询过去7天内完成的归档日志数量,并按照日期进行分组和排序。
发现前6天正常,当天归档日志异常增长。
2. 按小时统计

select to_char(FIRST_TIME, 'yyyymmddhh24'), count(*)from sys.v_$archived_log twhere t.FIRST_TIME > trunc(sysdate)group by to_char(FIRST_TIME, 'yyyymmddhh24')order by to_char(FIRST_TIME, 'yyyymmddhh24')

该SQL用于查询当天开始的归档日志数量,并按照小时进行分组和排序。
3. 按天和小时综合统计

SELECT    TO_CHAR(FIRST_TIME,'YYYY-MM-DD') DAY,TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'00',1,0)),'999') "00",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'01',1,0)),'999') "01",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'02',1,0)),'999') "02",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'03',1,0)),'999') "03",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'04',1,0)),'999') "04",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'05',1,0)),'999') "05",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'06',1,0)),'999') "06",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'07',1,0)),'999') "07",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'08',1,0)),'999') "08",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'09',1,0)),'999') "09",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'10',1,0)),'999') "10",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'11',1,0)),'999') "11",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'12',1,0)),'999') "12",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'13',1,0)),'999') "13",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'14',1,0)),'999') "14",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'15',1,0)),'999') "15",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'16',1,0)),'999') "16",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'17',1,0)),'999') "17",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'18',1,0)),'999') "18",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'19',1,0)),'999') "19",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'20',1,0)),'999') "20",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'21',1,0)),'999') "21",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'22',1,0)),'999') "22",TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'23',1,0)),'999') "23"
FROM V$LOG_HISTORY
GROUP BY TO_CHAR(FIRST_TIME,'YYYY-MM-DD') 
ORDER BY 1 DESC;

此SQL语句,用于统计每天每个小时的日志数量,并按照日期倒序排序
3. 根据按小时统计分析,发现归档日志集中在当天2个时间段,其他时间段基本正常。怀疑是在相关时间自动执行的后台任务造成,经深入排查予以否认。
4. AWR报告生成

sqlplus /nolog
conn / as sysdba
@?/rdbms/admin/awrrpt.sql

报告生成失败,原因是没有快照(Snap)
5. 分析没有快照(Snap)原因,网上说一般是SYSAUX表空间不足造成的,查询表空间占用情况,果然满了
6. 清理表空间

select distinct 'truncate table ' || segment_name || ';',s.bytes / 1024 / 1024 MBfrom dba_segments swhere s.segment_name like 'WRH$%'and segment_type in ('TABLE PARTITION', 'TABLE')and s.bytes / 1024 / 1024 > 100order by s.bytes / 1024 / 1024 desc;

此SQL可生成清理以 ‘WRH$’ 开头的、大于100MB的表的SQL。生成后执行,完成表空间清理。

  1. 问题解决,真是阴差阳错。

猜测的原因:
因SYSAUX表空间满,造成连锁反应,表现为归档日志异常增长。

一般情况分析

归档日志增长一般是DML操作大量数据造成的,而由SYSAUX表空间满的原因所造成的则比较少见,故记之。

排查归档日志暴增的方法,一般包括以下三个手段:

  1. SQL语句
  2. AWR
  3. 挖掘归档日志

本文到此结束,感谢您的观看!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue+Element Plus 初始化

1. 初始化 Vue 项目 创建vue3 项目 vue create k8s-platform-fe 2. 引入 Element Plus 安装 element-plus 首先去安装这些依赖包,安装好了将其引入,引入的方式有全局引用和局部引入。其实和组件是一样的,局部引入哪里引入哪里使用。…

接口测试和功能测试的区别

我们分成两个部分来讲: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分&#xf…

mac安装nvm

如果安装过node,须得卸载 sudo npm uninstall npm -gsudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*sudo rm -rf /usr/local/include/node /Users/$USER/.npmsudo rm /usr/local/bin/nodesudo rm /usr/local/share/m…

nginx rtmp http_flv直播推流

安装配置nginx yum install epel-release -y sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm yum install ffmpeg ffmpeg-devel -y yum install gcc -y yum install pcre pcre-devel -y yum install openssl open…

Wireshark抓包分析TCP协议:三次握手和四次挥手

01、前言 面试中我们经常会被问到TCP协议的三次握手和四次挥手的过程,为什么总喜欢问这个问题呢? 其实我们平时使用的很多协议都是应用层协议,比如HTTP协议,https协议,DNS协议,FTP协议等;而应…

Google OAuth 2 authorization - Error: redirect_uri_mismatch 400

出现这个问题,一般是因为google授权origin地址和重定向redirect_uri地址没有匹配上。 请仔细检查重定向地址的url中origin部分和授权origin部分是否能够匹配:

kubeadm一键部署K8S流程

-架构设计: k8s部署:(masternode1node2) master.com:192.168.17.144 node1.com:192.168.17.146 node2.com:192.168.17.148 master上部署: etcd(数据库)、kube-apiserver、kube-controller-mana…

Android屏幕像素密度

有时需要为视图属性指定大小尺寸值(通常以像素为单位,有时也用点、毫米或英寸)。一些常见的属性包括文字大小(text size)、边距(margin)以及内边距(padding)。文字大小指…

美容店预约小程序制作教程详解

现在,制作一个专属于美容店的预约小程序不再需要编程经验,通过乔拓云网提供的后台管理系统,你可以轻松地完成整个制作过程。下面,我将为你详细介绍如何DIY一个美容店预约小程序。 首先,登录乔拓云网的后台管理系统&…

html学习5(表单)

1、表单是一个包含表单元素的区域,用于收集用户的输入信息。 2、表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表(select)、单选框(radio-buttons&#xff09…

#rust taur运行报错#

场景:在window11系统上运行 tauri桌面莹应用,提示错误。 Visual Studio 2022 生成工具 安装的sdk11 , rust运行模式是stable-x86_64-pc-window-gnu, 运行npm run tauir dev 一致失败,失败信息如下 原因:1:在window11系…

推理加速 --- torch.compile

推理加速-- torch.compile 一、背景介绍1.2 首次推理速度慢1.3 推理多次之后,又会出现一次速度特别慢的情况,感觉好像是重新优化 二、如何使用三、其他设置3.1 mode 设置3.2 backend3.3 fullgraph3.4 dynamic 参考资料 一、背景介绍 PyTorch 2.0 官宣了…

银行网络安全体系发展及趋势思考

随着数字经济的快速发展,我国银行业务服务模式与技术架构发生了深刻变革。尤其在数字化转型背景下,网络安全作为保障银行业务稳定连续运行的基础,正面临更大的挑战。 银行网络安全体系与银行技术、业务架构密切相关,先后经历了分…

vue使用mqtt服务端实现即时通讯

npm install mqtt3.0.0注意要指定下载3.0.0版本 // 引入MQTT const mqtt require(mqtt/dist/mqtt.js) // 声明client data(){return {client: null} } //方法 //连接服务器connect() {let options {username: "xxx",password: "xxxx",cleanSession : fa…

二阶段web基础与http协议

dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层-----传输层-----网络层-----数据链路层-----物理层 ip地址,每一台主机都有一个唯一的地址标识(固定的ip地址) 1.区分用户和计算机 2.通信 ip地址的问题在于32位二进制数组成的&…

触发器实现海豚调度失败企业微信自动告警

原理 触发器监控工作流实例表,当工作流实例表中的状态更新后,针对状态为失败的任务进行企业微信告警。 发送企业微信消息函数 # 必须在pg的主机上线安装requests模块 pip install requests # 以postgres用户登陆psql客户端到etl数据库 psql etl -U po…

ClickHouse的安装启动

安装步骤 1.关闭防火墙 2.修改资源限制配置文件 2.1 路径:/etc/security/limits.conf 在末尾添加: * soft nofile 65536 #任何用户可以打开的最大的文件描述符数量,默认1024 这里的设置会限制tcp连接数 * hard nofile 65536 * soft nproc…

express学习笔记3 - 三大件

便于统一管理router,创建 router 文件夹,创建 router/index.js: const express require(express)// 注册路由 const router express.Router() router.get(/,function(req,res){res.send(让我们开始express之旅) }) /*** 集中处理404请求的…

使用矢量数据库打造全新的搜索引擎

在技术层面上,矢量数据库采用了一种名为“矢量索引”的技术,这是一种组织和搜索矢量数据的方法,可以快速找到相似矢量。其中关键的一环是“距离函数”的概念,它可以衡量两个矢量的相似程度。 1.矢量数据库简介 矢量数据库是专门…

抖音短视频seo矩阵系统源码开发部署技术分享

抖音短视频的SEO矩阵系统是一个非常重要的部分,它可以帮助视频更好地被搜索引擎识别和推荐。以下是一些关于开发和部署抖音短视频SEO矩阵系统的技术分享: 一、 抖音短视频SEO矩阵系统的技术分享: 关键词研究:在开发抖音短视频SEO矩…