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

2024-06-09 01:04

本文主要是介绍【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;

这篇关于【Oracle生产运维】表空间可用性告警排查处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043818

相关文章

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora