1 数据库报错
Wed Jun 17 14:52:32 2020
Errors in file /u01/app/oracle/diag/rdbms/xxx1/trace/test1_ora_9448.trc (incident=115553):
ORA-00600: 内部错误代码 , 参数 : [qesmaGetTblSeg1], [2361], [0], [1], [0x0D99189C0], [0x0D99189F8], [1], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/rdbms/xxx1/incident/incdir_115553/test1_ora_9448_i115553.trc
Use ADRCI or Support Workbench to package the incident.
..............................
Thu May 27 00:00:14 2021
Errors in file /u01/app/oracle/diag/rdbms/xxx1/trace/test1_ora_15681.trc (incident=131505):
ORA-00600: 内部错误代码 , 参数 : [qesmaGetTblSeg1], [2704], [0], [1], [0x0EC960070], [0x0EC9600A8], [1], [], [], [], [], []
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Use ADRCI or Support Workbench to package the incident.
2 查看相关trace文件

查看报 ORA-600错误的对象名称,发现都是同一张表,只是不同的分区:


在浏览 trace文件时,发现有大于当前时间的分区,其内还有数据。沟通应用,认为此事件为异常,引起的原因为终端设备时间不正确导致的。

根据如下查询,发现 2022 和2027年竟然有数据了
表分区

表分区中含有数据:


3 查看Oracle的官方文档
ORA-600 [qesmaGetTblSeg1] Raised by Insert Statement (Doc ID 1987590.1)
CAUSE
The issue matches unpublished
Bug 17957017 - ADD MORE DIAGNOSTICS FOR ORA-600 [QESMAGETTBLSEG1]
The bug is fixed in:
· 12.2 (Future Release)
· 12.1.0.2 (Server Patch Set)
· 11.2.0.4 Bundle Patch 15 for Exadata Database (Jan 2015)
NOTE:
This is a marker bug for a diagnostic enhancement to produce more information for ORA-600 [qesmaGetTblSeg1] errors.
This diagnostic has no impact other than to produce more output in the case of the above error.
Please refer to:
Note 17957017.8 - Bug 17957017 - Diagnostic enhancement to produce more information for ORA-600 [qesmaGetTblSeg1] errors
SOLUTION
To solve the issue, use any of below alternatives:
· Upgrade to Oracle 12.1.0.2
· - OR -
· Apply interim Patch 17957017 , if available for your platform and (PSU) patch level
· To check for conflicting patches, please use the MOS Patch Planner Tool
· Please refer to
· Note 1317012.1 - How To Use MOS Patch Planner To Check And Request The Conflict Patches?
· If no patch exists for your version, please contact Oracle Support for a backport request.
After the above, you can log a new SR with Oracle support in case the error reproduces.
查看某业务系统的补丁是否打上,发现是有的,如下:
[oracle@test~]$ opatch lsinventory |grep 17957017
16613964, 17957017, 18098207, 18471685, 19730508, 18264060, 17754782
######################
Bug 14252187 ORA-600 [qesmaGetTblSeg1] from deferred segment creation in RAC
Description
This bug is only relevant when using Real Application Clusters (RAC)With deferred segment creation turned on in a RAC configuration
various segment or partition-related internal errors may be seen.
Rediscovery Notes
If you are on 11.2+ and see segment or partition-related
internal errors such as ORA-600[qesmagettblseg1] or
ORA-600[kkpo_rcinfo_defstg:objnotfound], you could be
hitting this problem.
Workaround
Avoid deferred segment creation.
eg: Run with DEFERRED_SEGMENT_CREATION=false
4 分析 ORA-600 [qesmaGetTblSeg1] 报错原因
此错误的真正原因为 Oracle 在 11.2.0.4 版本以后,修改了表分配空间的行为,即 11.2.0.4 以前,在数据库里面创建一个表,数据库同时会为此表分配一定的空间,用于数据插入。但 11.2.0.4 以后,创建一个表或分区,数据库不会对表及分区分配空间,直到真正有数据插入时才会对表及分区分配空间。为了避免由于延迟创建分区,可以通过修改数据库参数来调整数据库的行为,经查,某业务系统的数据库参数已经进行调整,即创建表及分区的同时,会分配对应的空间,参数如下:

既然数据库层面补丁已打,相关参数进行了调整,但为什么数据库有时报 ORA-600 [ q esmaGetTblSeg1] 错误,有时又不报此错误,没有任何的认为干预。经过查询,认为同业务有关系, TEST _USER. TEST _HIS 这个表是按日进行分区的,每天自动进行分区,但由于终端时间不对,比如终端时间为 2027 年的某一天,需要插入数据,数据库发现没有此分区,然后在创建此分区,并分配空间,就会再次触发 ORA-600 [qesmaGetTblSeg1] 错误,故认为此错误是由于业务系统导致的,同数据库没有关系。
5 解决方法
1 业务系统调整终端时间,使终端时间正常,不能将数据插入到未来的某一天,此 ORA-600 报错应该就可以解决。
2 业务系统调整业务系统代码,使用条件过滤,避免插入数据到未来的某一天。
3 将 TEST _USER. TEST _HIS表后续所有要使用的分区都提前创建好,可以避免此问题。但不建议使用此方法。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69996316/viewspace-2776560/ ,如需转载,请注明出处,否则将追究法律责任。