Oracle 11G还有新BUG?ORACLE 表空间迷案!

前段时间遇到一个奇葩的问题,在开了SR和oracle support追踪两周以后才算是有了不算完美的结果,在这里整理出来给大家分享。

1.问题描述

12/13我司某基地MES全厂停线,系统卡死不可用,通知到我排查,查看alert log看到是表空间不足

怎么可能?我系统加了自动添加数据文件的脚本和表空间使用率的脚本?邮件中没有看到报警触发啊?

如下是自动检查表空间使用率,达到阈值会自动添加数据文件的脚本
Oracle自动处理表空间不足脚本-CSDN博客
当下查询该表空间使用率,发现该表空间还剩余73GB 那为什么会报表空间不足呢?为了不耽误系统使用,我先添加了四个数据文件,来解决此问题;

如下是我检查TBS使用率的sql

SELECT t.*  FROM (SELECT a.tablespace_name              ,a.unalloc_size              ,nvl(f.free_size, 0) free_size              ,a.used_size - nvl(f.free_size, 0) used_size              ,round((a.used_size - nvl(f.free_size, 0)) /                     (a.unalloc_size + a.used_size)                    ,2) capacity          FROM (SELECT tablespace_name                      ,round(SUM(bytes) / 1024 / 1024) free_size                  FROM dba_free_space                 GROUP BY tablespace_name) f              ,(SELECT tablespace_name                      ,round(SUM(user_bytes) / 1024 / 1024) used_size                      ,round(SUM(decode(autoextensible                                       ,'YES'                                       ,decode(sign(maxbytes - user_bytes)                                              ,-1                                              ,0                                              ,maxbytes - user_bytes)                                       ,0)) / 1024 / 1024) unalloc_size                  FROM dba_data_files                 GROUP BY tablespace_name) a         WHERE 1 = 1           AND a.tablespace_name = f.tablespace_name(+)) t --WHERE capacity >= 0.60   --AND (unalloc_size + free_size) < 4000   --AND (unalloc_size + free_size) < used_size / 2 ORDER BY capacity DESC;

2.问题溯源

2.1是不是空间碎片引起的?

明明还有空间为什么会报错空间不足呢?从这个结果看该表空间只有109m是unalloc的,有73GB是free,最先的怀疑就是是不是空间碎片太多

导致无法分配出连续的8192个blocks  8k*8k=64M?

查询表空间碎片脚本如下

参考文档 Script to Detect Tablespace Fragmentation (Doc ID 1020182.6)

SET ECHO off REM NAME:TFSTSFRM.SQL REM USAGE:"@path/tfstsfgm" REM ------------------------------------------------------------------------ REM REQUIREMENTS: REM    SELECT ON DBA_FREE_SPACE REM ------------------------------------------------------------------------ REM PURPOSE: REM    The following is a script that will determine how many extents REM    of contiguous free space you have in Oracle as well as the  REM total amount of free space you have in each tablespace. From  REM    these results you can detect how fragmented your tablespace is.  REM   REM    The ideal situation is to have one large free extent in your  REM    tablespace. The more extents of free space there are in the  REM    tablespace, the more likely you  will run into fragmentation  REM    problems. The size of the free extents is also  very important.  REM    If you have a lot of small extents (too small for any next   REM    extent size) but the total bytes of free space is large, then  REM    you may want to consider defragmentation options.  REM ------------------------------------------------------------------------ REM DISCLAIMER: REM    This script is provided for educational purposes only. It is NOT  REM    supported by Oracle World Wide Technical Support. REM    The script has been tested and appears to work as intended. REM    You should always run new scripts on a test instance initially. REM ------------------------------------------------------------------------ REM Main text of script follows: create table SPACE_TEMP (    TABLESPACE_NAME        CHAR(30),    CONTIGUOUS_BYTES       NUMBER)   /   declare     cursor query is select *             from dba_free_space                     order by tablespace_name, block_id;     this_row        query%rowtype;     previous_row    query%rowtype;   total           number;   begin     open query;     fetch query into this_row;     previous_row := this_row;     total := previous_row.bytes;     loop    fetch query into this_row;        exit when query%notfound;        if this_row.block_id = previous_row.block_id + previous_row.blocks then           total := total + this_row.bytes;           insert into SPACE_TEMP (tablespace_name)                     values (previous_row.tablespace_name);        else           insert into SPACE_TEMP values (previous_row.tablespace_name,                  total);           total := this_row.bytes;        end if;   previous_row := this_row;     end loop;     insert into SPACE_TEMP values (previous_row.tablespace_name,                              total);   end;   .   /   set pagesize 60   set newpage 0   set echo off   ttitle center 'Contiguous Extents Report'  skip 3   break on "TABLESPACE NAME" skip page duplicate   spool contig_free_space.lis   rem   column "CONTIGUOUS BYTES"       format 999,999,999   column "COUNT"                  format 999   column "TOTAL BYTES"            format 999,999,999   column "TODAY"   noprint new_value new_today format a1   rem   select TABLESPACE_NAME  "TABLESPACE NAME",          CONTIGUOUS_BYTES "CONTIGUOUS BYTES"   from SPACE_TEMP   where CONTIGUOUS_BYTES is not null and tablespace_name='TBS_MYCIM' and CONTIGUOUS_BYTES >100000000order by TABLESPACE_NAME, CONTIGUOUS_BYTES desc;   select tablespace_name, count(*) "# OF EXTENTS",            sum(contiguous_bytes) "TOTAL BYTES"    from space_temp   group by tablespace_name;   spool off   drop table SPACE_TEMP   /   

我对脚本做了调整增加了file_Id 这里剔除掉新加的四个数据文件的file_id 查到该表空间原有数据文件中的连续空间,新加数据文件并不会像ASM新加磁盘似的,会对数据文件做rebalance,除非对表空间做shrik,move等动作才会释放,也就是说这些连续空间就是原来有的。

从如下的查询结果来看 可以看到很多数据文件还有很多的连续free blocks 怎么都不至于出现8k连续的blocks无法分配的情况才对;

SQL> @/home/oracle/jobs/checktbs.sql
TABLESPACE NAME                FILE ID CONTIGUOUS BYTES
------------------------------ ------- ----------------
TBS_XXXXX                           80    3,672,113,152
TBS_XXXXX                           81    3,538,026,496
TBS_XXXXX                           79    2,817,523,712
TBS_XXXXX                           79    2,779,316,224
TBS_XXXXX                           81    2,483,552,256
TBS_XXXXX                           80    2,078,867,456
TBS_XXXXX                           79    1,238,564,864

2.2 会不会是异常的sql操作

在和oracle support沟通中提到CTAS失败可能会导致被占用的空间释放,那么我们查询问题时段的sql看看都有哪些操作

检查出问题前一个小时ASH 看看有什么sqlop

select distinct sql_opname from dba_hist_active_sess_history where sample_time>to_timestamp('2024/12/13 17:00:00','yyyy/mm/dd hh24:mi:ss') and sample_time<to_timestamp('2024/12/13 18:00:00','yyyy/mm/dd hh24:mi:ss');

看到除了一个create index外并无异常

检查系统当时的ddl log 没有看到有create index记录,考虑到我是用的的 after ddl trigger来记录ddl日志,也就是说如果失败了是不被记录到的。

检查问题create index的ASH,发现只被捕获到一个snap(10s)是一个schedule相关的后台进程,这么短时间不太可能占用这么大空间。

select sample_time,sql_id,session_id,session_type,sql_opname,program from dba_hist_active_sess_history 
where sample_time>to_timestamp('2024/12/13 17:00:00','yyyy/mm/dd hh24:mi:ss') 
and sample_time<to_timestamp('2024/12/13 18:00:00','yyyy/mm/dd hh24:mi:ss')
and sql_opname='CREATE INDEX';

后续又和oracle support 系统梳理了问题时间的ASH的sql记录,考虑到被insert extend的blocks即使rollback 也不会被释放,也没有查询到类似有CTAS(create table as)等异常操作

PS:如果CTAS失败是无法使用logminer挖掘查询到了的

3.结论

在经过和oracle support沟通了两周,经过印度工程师,大连工程师以及oracle 内部讨论给出的最终答复就是未知BUG;Oracle 11.2.0.4虽然上线了超过11年,依然是目前市场主流版本之一,从这个版本上市以来我也已经维护了很多很多套11G的库,确实从来没有遇到过这种问题,以现有已经查询到的数据无法得到逻辑自洽的合理解释,如果各位网友还有什么排查思路也请留言!

此次故障造成了2小时的生产停滞,这种情况领导一定会追根溯源,如果没有原厂技术支持,那肯定是没有办法交代,所以在之前的文章“谁是DBA圈里最大的背锅侠”就提到,原厂才是DBA圈里最大的背锅侠,当然了如果是BUG这个锅被的也不冤;如果这个问题是我自己来追,没有追到最终的原因,我只能说我查不到原因?老板会怀疑你的能力,如果原厂说这个未知BUG,那这就是结论!

谁是DBA圈里最大的背锅侠?_uncorrected hardware memery error in user-access a-CSDN博客

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

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

相关文章

测试冰淇淋模型

测试领域的冰淇淋模型&#xff08;Ice Cream Cone Model&#xff09;是一个相对于传统的测试金字塔模型的反转&#xff0c;是一种与经典金字塔模型相对的测试策略。在这种模型中&#xff0c;测试的分布和重点与传统金字塔模型相反。以下是冰淇淋模型的主要特点和原因&#xff1…

Quartz任务调度框架实现任务动态执行

说明&#xff1a;之前使用Quartz&#xff0c;都是写好Job&#xff0c;指定一个时间点&#xff0c;到点执行。最近有个需求&#xff0c;需要根据前端用户设置的时间点去执行&#xff0c;也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时&#xff0c;涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用&#xff0c;同时结合代码片段进行解析。 下图是我本地下载好模…

链式二叉树的基本操作,前序、中序以及后序遍历(递归实现,非递归实现)【有图解】

文章目录 结点设置二叉树的遍历前序、中序以及后序遍历 递归实现前序、中序以及后序遍历 非递归实现层序遍历 结点的个数叶子结点的个数第k层结点的个数值为x的结点树的最大深度二叉树的销毁 结点设置 既然是链式二叉树&#xff0c;那必须得有自己的结点类型&#xff0c;以下是…

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…

3.若依前端项目拉取、部署、访问

因为默认RuoYi-Vue是使用的Vue2,所以需要另外去下载vue3来部署。 拉取代码 git clone https://gitee.com/ys-gitee/RuoYi-Vue3.git 安装node才能执行npm相关的命令 执行命令npm install 如果npm install比较慢的话&#xff0c;需要添加上国内镜像 npm install --registrhttp…

Docker安装体验kuboard-k8s多集群管理工具

文章目录 1.kuboard是什么&#xff1f;2.docker安装命令2.1 Linux上docker环境安装命令2.2 Windows上docker环境安装命令 3.登录访问3.1首页访问地址3.2 默认账号密码3.3 登录页3.4 首页 4总结 1.kuboard是什么&#xff1f; 参看官网: https://kuboard.cn/gitHub项目地址&…

重学设计模式-责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它通过将请求沿着链传递&#xff0c;使多个对象都有机会处理该请求&#xff0c;从而避免了请求的发送者与接收者之间的耦合关系。本文将详细介绍责任链模式的定义、优缺点、应…

SuperMap iClient3D for Cesium等高线标注

kele 前言 在三维地形分析中&#xff0c;等高线分析是一种非常重要的分析方法&#xff0c;它能直观的表达出地形的高低起伏特征&#xff0c;在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中&#xff0c;等高线分析是前端GPU分析&#xff0c;能够分析并渲染出等高…

简易共享屏幕工具改进版

昨天心血来潮写了一篇关于简易共享屏幕工具的文章&#xff0c;发现也有一些阅读量&#xff0c;并且我对于它的效果不是很满意 &#xff0c;实际呈现的帧率还是太低了。所以我今天换了更高效的方式来实现。 50 行代码简易屏幕共享工具 改进 降低分辨率 昨天那个测试的帧率低&a…

4.银河麒麟V10(ARM) 离线安装 MySQL

1. 系统版本 [rootga-sit-cssjgj-db-01u ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 4.19.90-52.39.v2207.ky10.aarch64Build: Kylin Linux Advanced Server release V10 (SP3) /(La…

图像处理-Ch5-图像复原与重建

Ch5 图像复原 文章目录 Ch5 图像复原图像退化与复原(Image Degradation and Restoration)噪声模型(Noise Models)i.i.d.空间随机噪声(Generating Spatial Random Noise with a Specified Distribution)周期噪声(Periodic Noise)估计噪声参数(Estimating Noise Parameters) 在仅…

「下载」智慧园区及重点区域安全防范解决方案:框架统一规划,建设集成管理平台

智慧园区在基础设施建设和管理上仍存在诸多挑战。园区内场景碎片化、系统独立化、数据无交互、应用无联动等问题普遍存在&#xff0c;导致管理效率低下&#xff0c;安全隐患频发。 各安保系统如视频监控系统、报警管理系统、门禁管理系统等独立运行&#xff0c;数据不共享&…

LeetCode - Google 校招100题 第6天 回溯法(Backtracking) (8题)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144743505 LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21题)校招100题 第3天 动态规划(DP) (20题)

Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 快速掌握Elasticsearch检索之二&#xff1a;滚动查询(scrool)获取全量数据(golang) 1、search_after检索 在前面的文章介绍了fromsize的普通分页…

网易企业邮箱登陆:保障数据安全

网易企业邮箱是一款为企业提供安全可靠的电子邮件服务的工具。通过网易企业邮箱&#xff0c;企业可以实现员工之间的高效沟通和信息共享&#xff0c;同时保障数据的安全性。 企业邮箱的安全性是企业信息保护的重要组成部分。网易企业邮箱采用了多层加密技术&#xff0c;确保邮件…

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖&#xff0c;前往 官网下载 pcre2依赖下载&#xff0c;前往Git下载 zlib依赖下载&#xff0c;前往Git下载 下载完成后完整的包如下&#xff1a; 如果网速下载不到请使用网盘下载 通过网盘分享的文件…

Hive其十,优化和数据倾斜

目录 Hive优化 1、开启本地模式 2、explain分析SQL语句 3、修改Fetch操作 4、开启hive的严格模式【提高了安全性】 5、JVM重用 6、分区、分桶以及压缩 7、合理设置map和reduce的数量 合理设置map数量&#xff1a; 设置合理的reducer的个数 8、设置并行执行 9、CBO优…