当前位置: 首页 > news >正文

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博客

相关文章:

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

前段时间遇到一个奇葩的问题&#xff0c;在开了SR和oracle support追踪两周以后才算是有了不算完美的结果&#xff0c;在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线&#xff0c;系统卡死不可用&#xff0c;通知到我排查&#xff0c;查看alert log看到是…...

java实现预览服务器文件,不进行下载,并增加水印效果

通过文件路径获取文件&#xff0c;对不同类型的文件进行不同处理&#xff0c;将Word文件转成pdf文件预览&#xff0c;并早呢更加水印&#xff0c;暂不支持Excel文件&#xff0c;如果浏览器不支持PDF文件预览需要下载插件。文中currentUser.getUserid()&#xff0c;即为增加的水…...

SAP月结、年结前重点检查事项(后勤与财务模块)

文章目录 一、PP生产模块相关的事务检查二、SD销售模块相关的事务检查:三、MM物料管理模块相关的事务检查四、FICO财务模块相关的事务检查五、年结前若干注意事项【SAP系统PP模块研究】 #SAP #生产订单 #月结 #年结 一、PP生产模块相关的事务检查 1、月末盘点后,生产用料的…...

MYSQL 高阶语句

目录 1、排列查询 2、区间判断 3、对结果进行分组查询 4、limit和distinct 5、设置别名 通配符 6、子查询 7、exists语句&#xff0c;判断子查询的结果是否为空 8、视图表 9、连接查询 1. 内连接 2. 左连接 3. 右连接 create table info ( id int primary key, name…...

VS Code中怎样查看某分支的提交历史记录

VsCode中无法直接查看某分支的提交记录&#xff0c;需借助插件才行&#xff0c;常见的插件如果git history只能查看某页面的改动记录&#xff0c;无法查看某分支的整体提交记录&#xff0c;我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…...

知识库搭建实战一、(基于 Qianwen 大模型的知识库搭建)

基于 Qianwen 大模型的知识库开发规划 基础环境搭建可以参考文章:基础环境搭建 在构建智能应用时,知识库是一个重要的基础模块。以下将基于 Qianwen 大模型,详细介绍构建一个标准知识库的设计思路及其实现步骤。 知识库的核心功能模块 知识库开发的核心功能模块主要包括…...

ctr方法下载的镜像能用docker save进行保存吗?

ctr 和 docker 是两个不同的容器运行时工具,它们使用的镜像存储格式是兼容的(都是 OCI 标准镜像),但它们的镜像管理方式和存储路径不同。因此,直接使用 docker save 保存 ctr 拉取的镜像可能会遇到问题。 关键点 ctr 和 docker 的镜像存储位置不同: ctr(containerd)的镜…...

win32汇编环境下,窗口程序中生成listview列表控件及显示

;运行效果 ;抄下面源码在radasm里面&#xff0c;可以直接编译运行。重要部分加了备注。 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&…...

运维之网络安全抓包—— WireShark 和 tcpdump

为什么要抓包&#xff1f;何为抓包&#xff1f; 抓包&#xff08;packet capture&#xff09;就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作&#xff0c;也用来检查网络安全。抓包也经常被用来进行数据截取等。为什么要抓包&#xff1f;因为在处理 IP网络…...

【复刻】数字化转型是否赋能企业新质生产力发展?(2015-2023年)

参照赵国庆&#xff08;2024&#xff09;的做法&#xff0c;对来自产业经济评论《企业数字化转型是否赋能企业新质生产力发展——基于中国上市企业的微观证据》一文中的基准回归部分进行复刻基于2015-2023年中国A股上市公司数据&#xff0c;实证分析企业数字化转型对新质生产力…...

【数据仓库】spark大数据处理框架

文章目录 概述架构spark 架构角色下载安装启动pyspark启动spark-sehll启动spark-sqlspark-submit经验 概述 Spark是一个性能优异的集群计算框架&#xff0c;广泛应用于大数据领域。类似Hadoop&#xff0c;但对Hadoop做了优化&#xff0c;计算任务的中间结果可以存储在内存中&a…...

2 秒杀系统架构

第一步 思考面临的问题和业务场景 秒杀系统面临的问题: 短时间内并发非常高&#xff0c;如果按照秒杀的并发做相应的承载会造成大量资源的浪费。第二解决超卖的问题。 第二步 思考目前的处境和解决方案 因为秒杀系统属于短时间内的高并发问题&#xff0c;我们不可能使用那么…...

UNI-APP_i18n国际化引入

官方文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/i18n.html vue2中使用 1. 新建文件 locale/index.js import en from ./en.json import zhHans from ./zh-Hans.json import zhHant from ./zh-Hant.json const messages {en,zh-Hans: zhHans,zh-Hant: zhHant }…...

【详解】AndroidWebView的加载超时处理

Android WebView的加载超时处理 在Android开发中&#xff0c;WebView是一个常用的组件&#xff0c;用于在应用中嵌入网页。然而&#xff0c;当网络状况不佳或页面加载过慢时&#xff0c;用户可能会遇到加载超时的问题。为了提升用户体验&#xff0c;我们需要对WebView的加载超时…...

RedisDesktopManager新版本不再支持SSH连接远程redis后

背景 RedisDesktopManager(又名RDM)是一个用于Windows、Linux和MacOS的快速开源Redis数据库管理应用程序。这几天从新下载RedisDesktopManager最新版本&#xff0c;结果发现新版本开始不支持SSH连接远程redis了。 解决方案 第一种 根据网上有效的信息&#xff0c;可以回退版…...

开源 SOAP over UDP

简介 看到有人想要实现两个 EXE 之间的互动。这可以采用 RPC 的方式嘛。 Delphi 现成的 RPC 框架&#xff0c;比如 WebService&#xff0c;比如 DataSnap&#xff1b; 当然&#xff0c;github 上面还有第三方开源的 XMLRPC 等等。 为啥要搞一个 UDP Delphi 的 WebService …...

Levenshtein 距离的原理与应用

引言 在文本处理和自然语言处理&#xff08;NLP&#xff09;中&#xff0c;衡量两个字符串相似度是一项重要任务。Levenshtein 距离&#xff08;也称编辑距离&#xff09;是一种常见的算法&#xff0c;用于计算将一个字符串转换为另一个字符串所需的最少编辑操作次数。这些操作…...

解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

前言 作者在读取json文件的时候出现上述报错&#xff0c;起初以为是自己json文件有问题&#xff0c;但借助在线工具查看后发现没问题&#xff0c;就卡住了&#xff0c;在debug的过程中发现了json文件读取的一个小坑&#xff0c;在此分享一下 解决过程 原代码 with open(anno…...

hive中的四种排序类型

1、Order by 全局排序 ASC&#xff08;ascend&#xff09;: 升序&#xff08;默认&#xff09; DESC&#xff08;descend&#xff09;: 降序 注意 &#xff1a;只有一个 Reducer,即使我们在设置set reducer的数量为多个,但是在执行了order by语句之后,当前此次的运算还是只有…...

Spring-AI讲解

Spring-AI langchain(python) langchain4j 官网&#xff1a; https://spring.io/projects/spring-ai#learn 整合chatgpt 前置准备 open-ai-key: https://api.xty.app/register?affPuZD https://xiaoai.plus/ https://eylink.cn/ 或者淘宝搜&#xff1a; open ai key魔法…...

【brew安装失败】DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0

从你提供的 nslookup 输出看&#xff0c;DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0&#xff0c;这通常意味着无法解析该域名或该域名被某些 DNS 屏蔽了。这种情况通常有几个可能的原因&#xff1a; 可能的原因和解决方法 本地 DNS 问题&#xff1a; 有可能是你的本…...

HTML——29. 音频引入二

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>音频引入</title></head><body><!--audio:在网页中引入音频IE8以及之前版本不支持属性名和属性值一样&#xff0c;可以只写属性名src属性:指定音频文件…...

代码随想录训练营第三十四天| 62.不同路径 63. 不同路径 II

62.不同路径 题目链接&#xff1a;62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 讲解链接&#xff1a;代码随想录 动态规划五步走 1 定义dp数组是到dp[i][j]时有dp[i][j]条路径 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xf…...

V90伺服PN版组态配置<一>

1、添加PLC之后&#xff0c;继续博图中网络视图中添加新设备&#xff0c;添加伺服驱动器组态设备 2、SINAMICS V90 PN V1.0 3、修改驱动器的IP地址。 【注意】 在项目中提前做好项目规划&#xff0c;如PLC设备从192.168.0.1开始&#xff0c;顺序递增------个位数都是CPU设备…...

又一年。。。。。。

2024&#xff0c;浑浑噩噩的一年。 除了100以内的加减法&#xff08;数据&#xff0c;数据&#xff0c;还是数据。。。。。。&#xff09;&#xff0c;似乎没做些什么。 脸盲症越来越重的&#xff0c;怕是哪天连自己都不认得自己的了。 看到什么&#xff0c;听到什…...

xterm + vue3 + websocket 终端界面

xterm.js 下载插件 // xterm npm install --save xterm// xterm-addon-fit 使终端适应包含元素 npm install --save xterm-addon-fit// xterm-addon-attach 通过websocket附加到运行中的服务器进程 npm install --save xterm-addon-attach <template><div :…...

医疗数仓业务数据采集与同步

业务数据采集与同步 业务采集组件配置业务数据同步概述数据同步策略选择数据同步工具概述1.1.4 全量表数据同步DataX配置文件生成全量表数据同步脚本增量表数据同步 MySQL - Maxwell - Kafka - Flume - HDFSMaxwell配置增量表首日全量同步 业务采集组件配置 Maxwell将业务采集到…...

数字孪生智慧水利与水务所包含的应用场景有哪些?二者有何区别

水利和水务是两个密切相关但有所区别的概念&#xff0c;它们在水资源管理和保护方面各自承担着不同的职责和功能。 定义 智慧水务&#xff1a;智慧水务是指通过物联网、大数据、云计算、人工智能等新一代信息技术&#xff0c;对城市供水、排水、污水处理、水质监测等水务系统…...

Qt Creator项目构建配置说明

QT安装好之后&#xff0c;在安装目录的Tools\QtCreator\bin下找到qtcreator.exe文件并双击打开 点击文件-新建文件或项目 选择Qt Widgets Application 设置项目名称以及路径 make工具选择qmake&#xff08;cmake还未尝试过&#xff09; 设置主界面对应类的名称、父类&#…...

进程间通信的“五大武器”

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…...