【Oracle生产运维】表空间可用性告警排查处理

1 前言

在生产环境中,一般设置表空间告警阈值是90%,在接到监控报警后,并不是需要立刻对表空间进行扩容。

决定是否扩容主要看表空间最近的增量是多少,假如剩余10%的空间还能支持1个月的增量,那就不需要急着扩容。如果剩余的空间只能坚持几天,那么最好是立即扩容,以防止数据突增

接到告警后,一般工作过程如下:

  1. 查看表空间利用率和剩余容量;
  2. 查看表空间增量;
  3. 扩容或者释放空间;
  4. 找出数据增量异常的对象。

根据下面的常用sql脚本排查。

2 处理流程

2.1 查看表空间利用率

col tablespace_name for a20
col pct_used for a10
select a.tablespace_name,a.total_mb,a.total_mb - b.free_mb used_mb,b.free_mb,case when a.total_mb <> 0 then round((a.total_mb - b.free_mb) / a.total_mb * 100,2)else null end || '%' pct_usedfrom (select ts.tablespace_name,round(sum(bytes) / 1024 / 1024,2) total_mbfrom dba_tablespaces ts,dba_data_files df  where ts.tablespace_name = df.tablespace_namegroup by ts.tablespace_name) a,(select fs.tablespace_name,round(sum(bytes) / 1024 /1024,2) free_mbfrom dba_free_space fsgroup by fs.tablespace_name) bwhere a.tablespace_name = b.tablespace_nameand a.tablespace_name = '&tsb_name'order by 1;

2.2 查看表空间增量

日增量

set line 200
col ts_name for a30
col pct_used for a10
SELECT a.snap_id,c.tablespace_name ts_name,to_char(to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss'), 'yyyy-mm-dd hh24:mi') rtime,round(a.tablespace_size * c.block_size / 1024 / 1024, 2) ts_size_mb,round(a.tablespace_usedsize * c.block_size / 1024 / 1024, 2) ts_used_mb,round((a.tablespace_size - a.tablespace_usedsize) * c.block_size / 1024 / 1024,2) ts_free_mb,round(a.tablespace_usedsize * c.block_size / 1024 / 1024, 2) - lag(round(a.tablespace_usedsize * c.block_size / 1024 / 1024, 2),1) over(order by a.tablespace_id,to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss')) inc_mb,round(a.tablespace_usedsize / a.tablespace_size * 100, 2) || '%' pct_usedFROM dba_hist_tbspc_space_usage a, (SELECT tablespace_id,substr(rtime, 1, 10) rtime,max(snap_id) snap_idFROM dba_hist_tbspc_space_usage nbgroup by tablespace_id, substr(rtime, 1, 10)) b,dba_tablespaces c,v$tablespace dwhere a.snap_id = b.snap_idand a.tablespace_id = b.tablespace_idand a.tablespace_id=d.TS#and d.NAME=c.tablespace_name  and d.NAME = '&tbs_name'and to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') >=sysdate-30order by a.tablespace_id,to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') desc;

累计增量,根据awr保留时间而定,默认为8天:

set line 200
col ts_name for a30
col pct_used for a10
with ts as(SELECT a.snap_id,c.tablespace_name ts_name,to_char(to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss'), 'yyyy-mm-dd hh24:mi') rtime,round(a.tablespace_size * c.block_size / 1024 / 1024, 2) ts_mb,round(a.tablespace_usedsize * c.block_size / 1024 / 1024, 2) ts_used_mb,round((a.tablespace_size - a.tablespace_usedsize) * c.block_size / 1024 / 1024,2) ts_free_mb,round(a.tablespace_usedsize / a.tablespace_size * 100, 2) || '%' pct_usedFROM dba_hist_tbspc_space_usage a, (SELECT tablespace_id,substr(rtime, 1, 10) rtime,max(snap_id) snap_idFROM dba_hist_tbspc_space_usage nbgroup by tablespace_id, substr(rtime, 1, 10)) b,dba_tablespaces c,v$tablespace dwhere a.snap_id = b.snap_idand a.tablespace_id = b.tablespace_idand a.tablespace_id=d.TS#and d.NAME=c.tablespace_nameand to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') >=sysdate-30)
select f.ts_name,f.ts_mb,f.ts_used_mb begin_used_mb,f.rtime begin_time,t.ts_used_mb end_used_mb,t.rtime end_time,t.ts_used_mb - f.ts_used_mb inc_mb,round(to_date(t.rtime,'yyyy-mm-dd hh24:mi:ss') - to_date(f.rtime,'yyyy-mm-dd hh24:mi:ss'),2) inc_daysfrom (select a.*,row_number()over(partition by a.ts_name order by a.snap_id desc) rnfrom ts a) t,  (select b.*,row_number()over(partition by b.ts_name order by b.snap_id) rnfrom ts b) fwhere t.rn = 1 and f.rn = 1 and t.ts_name = f.ts_nameand t.ts_name = '&ts_name';

根据上述查出来的表空间日增量和累计增量结果,可以大概估算出剩余的空间可以坚持多久,根据实际情况决定是否扩容。

2.3 查看数据文件路径

此步骤主要是查看表空间数据文件路径,为表空间扩容添加数据文件做好环境调研。

set lines 200
set pagesize 300
col file_name for a60
col size_mb for 999999.99
select * from (select file_name,file_id,tablespace_name,round(bytes / 1024 / 1024,2) size_mb,status,autoextensiblefrom dba_data_fileswhere tablespace_name = '&ts_name'order by 2 desc)where rownum <= 10;

3 表空间扩容

表空间扩容可以选择添加数据文件,或者拓展数据文件。

3.1 添加数据文件

添加数据文件的时候一定要注意:

  • 在RAC集群环境中,切记不要将数据文件创建到本地,这样就会造成集群节点间的不一致,可能会导致其他节点起不来。
  • 也不要将数据文件创建到其他磁盘组中,这样不够规范。

以表空间ts_test为例:

--ASM:
SQL> alter tablespace ts_test add datafile '+DATA' size 100M;--File System:
SQL> alter tablespace ts_test datafile '/u01/app/oracle/oradata/datafile/ts_test02.dbf' size 100M;

3.2 拓展数据文件

假设原来ts_test.274.1171146701大小为100M,我们可以将其拓展到200M以达到扩容的目的:

alter database datafile'+DATA/orcl/datafile/ts_test.274.1171146701' resize 200M;

3.3 扩容后检查

扩容后需要检查表空间使用率是否下降:

col tablespace_name for a20
col pct_used for a10
select a.tablespace_name,a.total_mb,a.total_mb - b.free_mb used_mb,b.free_mb,case when a.total_mb <> 0 then round((a.total_mb - b.free_mb) / a.total_mb * 100,2)else null end || '%' pct_usedfrom (select ts.tablespace_name,round(sum(bytes) / 1024 / 1024,2) total_mbfrom dba_tablespaces ts,dba_data_files df  where ts.tablespace_name = df.tablespace_namegroup by ts.tablespace_name) a,(select fs.tablespace_name,round(sum(bytes) / 1024 /1024,2) free_mbfrom dba_free_space fsgroup by fs.tablespace_name) bwhere a.tablespace_name = b.tablespace_nameand a.tablespace_name = '&tsb_name'order by 1;

4 后续排查

如果表空间时短时间内激增,则在扩容后还需要排查,找出是哪个对象数据突增影响的。

4.1 查看snap_id

set line 200
select distinct snap_id,
to_char(begin_interval_time,‘yyyy-mm-dd hh24:mi:ss’) begin_interval_time,
to_char(end_interval_time,‘yyyy-mm-dd hh24:mi:ss’) end_interval_time
from dba_hist_snapshot
where to_char(begin_interval_time,‘yyyy-mm-dd hh24:mi:ss’) >=
to_char(sysdate - &day_ago,‘yyyy-mm-dd hh24:mi:ss’)
order by snap_id desc;

4.2 查看某个表空间下增量最多的对象

set lines 200
col object_name for a30
select * from
(select obj.owner,obj.object_name,sum(hs.db_block_changes_delta) db_block_changes_delta,
round(sum(hs.space_used_delta) / 1024 / 1024,2) space_delta_mb
from dba_hist_seg_stat hs,
v$tablespace ts,
dba_objects obj,
dba_hist_snapshot sn
where hs.ts# = ts.ts#
and hs.snap_id = sn.snap_id
and hs.obj# = obj.object_id
and ts.name = ‘&tbs_name’
and sn.begin_interval_time >= sysdate - &day_ago
group by obj.owner,obj.object_name
order by space_delta_mb desc)
where rownum <= 10;

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

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

相关文章

linux经典例题编程

编写Shell脚本&#xff0c;计算1~100的和 首先vi 1.sh,创建一个名为1.sh的脚本&#xff0c;然后赋予这个脚本权限&#xff0c;使用命令chmod 755 1.sh&#xff0c;然后就可以在脚本中写程序&#xff0c;然后运行。 shell脚本内容 运行结果&#xff1a; 编写Shell脚本&#xf…

C++的封装(十二):外部构造函数

通常&#xff0c;C创建一个对象&#xff0c;都是调用构造函数对它初始化&#xff1a; class AB {int a;int b; public:AB(int ia, int ib) {aia; bib;}void display() {printf("a%d, b%d\n", a, b);}void other(); };如果实现过程需要施加更多的控制&#xff0c;比如…

自动化测试实战:如何构建高效且可靠的测试框架

随着软件行业的快速发展&#xff0c;自动化测试已成为确保软件质量不可或缺的环节。作为一名资深自动化测试工程师&#xff0c;我将分享如何构建一个高效且可靠的自动化测试框架&#xff0c;以提升测试效率&#xff0c;降低人工成本&#xff0c;并确保软件产品的稳定性。 一、…

软考-架构设计师-综合知识总结(试卷:2009~2022)(上篇)

说明 本文档对2009到2022年试卷的综合知识进行了归纳总结&#xff0c;同时对叶宏主编的《系统架构设计师教程》划分重点。 第一章&#xff1a;关于架构、架构师概述 1.1 重要知识点&#xff1a; 模块化开发规则&#xff1a; 1> 最高模块内聚&#xff0c;即在一个模块内部的…

一千题,No.0049(跟奥巴马一起编程)

美国总统奥巴马不仅呼吁所有人都学习编程&#xff0c;甚至以身作则编写代码&#xff0c;成为美国历史上首位编写计算机代码的总统。2014 年底&#xff0c;为庆祝“计算机科学教育周”正式启动&#xff0c;奥巴马编写了很简单的计算机代码&#xff1a;在屏幕上画一个正方形。现在…

开发指南028-生成二维码

平台通过zxing来生成二维码 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version> </dependency> <dependency><groupId>com.google.zxing</groupId>&l…

分享一个 .NET Core Console 项目使用依赖注入的详细例子

前言 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种软件设计模式&#xff0c;主要用于管理和组织一个软件系统中不同模块之间的依赖关系。 在依赖注入中&#xff0c;依赖项&#xff08;也称为组件或服务&#xff09;不是在代码内部创建或查…

【浏览器插件】理解浏览器扩展开发:为什么 `content script` 里的 `window` 与页面的 `window` 不同以及解决方案

理解浏览器扩展开发&#xff1a;为什么 content script 里的 window 与页面的 window 不同以及解决方案 浏览器扩展开发为开发者提供了强大的工具&#xff0c;使得我们可以扩展和增强网页的功能。然而&#xff0c;在开发过程中&#xff0c;尤其是当涉及到与网页内容进行交互时…

Android基础-事件分发机制

在Android系统中&#xff0c;事件分发机制是处理用户交互事件的核心机制。当用户与设备进行交互&#xff0c;如点击、滑动屏幕时&#xff0c;这些动作会被系统捕获并转化为相应的事件&#xff08;如MotionEvent&#xff09;&#xff0c;随后这些事件需要通过一系列的处理和传递…

Redux实现状态管理

在使用 Redux 的应用中&#xff0c;实现状态管理通常涉及以下几个步骤&#xff1a; 创建 Action&#xff1a;Action 是一个简单的 JavaScript 对象&#xff0c;它描述了一个行为&#xff0c;通常有一个 type 字段来表示行为类型。 创建 Reducer&#xff1a;Reducer 是一个纯函…

C# WPF入门学习主线篇(十二)—— Canvas布局容器

欢迎来到C# WPF入门学习系列的第十二篇。在之前的文章中&#xff0c;我们介绍了WPF布局管理的基本概念以及常见的布局容器。本篇博客将详细介绍其中一种最基本的布局容器——Canvas布局容器。通过本篇文章&#xff0c;您将学习如何使用Canvas布局容器来精确控制子控件的位置&am…

二叉树的算法题目

二叉树的遍历题目 二叉树遍历一般包含三种分别为&#xff1a;根左右、左根右、左右根&#xff08;又称为前序遍历、中序遍历、后序遍历&#xff09; 方法一&#xff1a;使用递归遍历 方法二&#xff1a;使用迭代使用栈 我们以左根右&#xff08;中序遍历&…

【SpringBoot】项目搭建基本步骤(整合 Mybatis)

搭建 SpringBoot 项目有两种方式&#xff1a;使用 IDEA、或者在 Spring 官网下载。 1. IDEA 创建 打开 IDEA 后&#xff0c;英文版请点击 File -> New -> Project -> Spring Initialer。 中文版请点击 文件 -> 新建 -> 项目 -> Spring Initialer。 在打开的…

【Proteus8.16】Proteus8.16.SP3.exe的安装包,安装方法

下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/14ZlETF7g4Owh8djLaHwBOw?pwd2bo3 提取码&#xff1a;2bo3 管理员打开proteus8.16.SP3.exe一路装就行了&#xff0c;许可证选Licence2.lxk,点安装后关闭&#xff0c;然后继续装完。 然后打开Patch-Proteus-8.16-…

力扣2972.统计移除递增子数组的数目 II

力扣2972.统计移除递增子数组的数目 II 类似1574. 核心都是定一边最大能取到的位置定一边 移一边当我们确定左右端点位置时 [i1,j]是一定要删除的然后i 1这里可以一直缩小到0也就是总共 i 2个子数组 class Solution {public:long long incremovableSubarrayCount(vector&l…

【Ardiuno】ESP32单片机初试点亮LED小灯

之前用的Ardiuno的主板做过一些简单的开发实验&#xff0c;按照相关说明还是很容易进行操作的。最近看了ESP32可以有wifi的功能&#xff0c;也就买来实验一下。 ESP32的主板开发环境安装&#xff0c;按照说明的安装下载程序总是报错&#xff0c;又上网搜索半天最后按照CSDN上某…

docker-compose部署RocketMq

docker-compose部署RocketMq 先看看官网&#xff1a;https://rocketmq.apache.org/zh/docs/4.x/quickstart/03quickstartWithDockercompose 尝试了在docker-compose文件中启动命令位置直接设置jvm内存大小&#xff0c;无法正常启动 command: sh mqbroker -c /home/rocketmq/…

平衡二叉树详解

目录 平衡二叉树的定义 平衡二叉树的基本操作 查找 插入 AVL树的建立 平衡二叉树的定义 平衡二叉树仍然是一棵二叉查找树&#xff0c;只是在其基础上增加了平衡的要求&#xff0c;也就是其左右子树的高度之差的绝对值不超过1。 在定义树的结构时需要加入一个变量height&…

uc_os操作练习

目录 一、CubeMX配置 二、获取uc-os源码 三、代码移植 四、代码修改 五、总结 六、参考资料 一、CubeMX配置 首先进入CubeMX&#xff0c;&#xff0c;新建工程&#xff0c;选择STM32F103C8T6芯片&#xff0c;照例配置好RCC和SYS。 然后配置GPIO输出&#xff0c;这里选择P…

2024 年最新 Python 基于百度智能云实现文字识别 OCR 详细教程

文字识别 OCR 概述 文字识别OCR&#xff08;Optical Character Recognition&#xff09;提供多场景、多语种、高精度的文字检测与识别服务&#xff0c;多项ICDAR指标居世界第一。广泛适用于金融服务、财税报销、法律政务、保险医疗、快递物流、交通出行、教育培训等场景&#…