f27b66494b17d54eb0d62a1b3e72da2f.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看ORA-00600: [4194] 错误解决办法,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

目  录
    前 言
    环境信息
    问题现象
    问题原因
    处理过程
        1、创建pfile(nomount)
        2、修改 pfile
        3、使用restrict模式启动
        4、创建新的 undo 表空间
        5、使用 spfile 重新启动数据库
    参考文章


前  言

上一篇文章还停留在腊月二十六,现在正月十五也已经过去了,这个年算是过去了,这二十多天里看到很多大佬都在不停的更新文章,卷的铺天盖地,我就只能假装看不见,算是躺平了,什么也没有干,静静地等待这个年过完。本文是今年年初一位朋友遇到的数据库的小问题,事后指导其记录形成的文档,算是小白记录问题处理过程,也是本公众号的第一篇投稿(还有投稿的读者朋友可以找我私聊),适合初学者通过搜索引擎、MOS 来解决 Oracle 数据库遇到的小问题并按照一定的格式来记录问题处理过程,具有一定的参考性,废话不多说,进入正文。

环境信息

生产环境是 Oracle11g 11204 版本的单机数据库,没有备库,部分数据有物理备份;数据库本身没有任何补丁。

[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 11 11:02:36 2024
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from dba_registry_history;
ACTION_TIME               ACTION   NAMESPAC VERSION          ID BUNDL COMMENTS
---------------------------- -------- -------- ---------- ---------- ----- -------------
11-DEC-18 05.44.22.925930 PM   APPLY    SERVER   11.2.0.4            0 PSU   Patchset 11.2.0.2.0

82adba733b4cebc20c2f496db400ca0c.png

问题现象

一项目组的外地项目的生产环境,上个月的某个周五凌晨几台物理机宕机,当机器正常启动后,厂商反馈数据库有异常,做了很多修复依旧不行(不知道做了哪些修复还不行),于是乎他则接手,开通远程查看数据库发现,数据库可以正常启动,但是无法执行任何查询命令,会立马宕机,如下所示:

[oracle@localhost ~]$ sqlplus / as sysdba
SQL*plus: Release 11.2.0.4.0 Production on Fri Jan 5 12:37:03 2024Copyright (c) 1982,2013, oracle. A11 rights reserved.Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total system Gobal Area  7532736512    bytes
Fixed Size                 2267912    bytes
Variable size            2097153272    bytes
Database Buffers        5419040768    bytes
Redo Buffers              14274560    bytes  
Database mounted.
Database opened.
SQL> show parameter name;
ORA-03135: connection 1ost contact
Process ID: 6416
Session ID: 283  serial number: 5

050d7f05daeec0d686f046dcef6c50d4.png
64c6b420dcc8619d5a217220e231483b.png

很奇怪,可以正常 open 数据库,但是不能进行下一步的查询操作,于是只能去查看 alert 日志,发现有大批量的 ORA-00600 报错:

opiodr aborting process unknown ospid (4436) as a result of ORA-603
Block recovery from logseq 1, block 65 to scn 33902276338
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0: /datafile/orcl/redo01.log
Block recovery completed at rba 1.68.16, scn 7.3837505268
Block recovery from logseq 1, block 65 to scn 33902276377
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0: /datafile/orcl/redo01.log
Block recovery completed at rba 1.110.16, scn 7.3837505312
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_4472.trc  (incident=336185):
ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_336185/orcl_m000_4472_i336185.trc
Dumping diagnostic data in directory=[cdmp_20240105103802], requested by (instance=1, osid=4436), summary=[incident=336163].
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_4472.trc:
ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
Fri Jan 05 10:38:46 2024
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_4504.trc  (incident=336200):
ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_336200/orcl_m000_4504_i336200.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Block recovery from logseq 1, block 65 to scn 33902276338
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0: /datafile/orcl/redo01.log
Block recovery completed at rba 1.68.16, scn 7.3837505268
Block recovery from logseq 1, block 65 to scn 33902276575
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0: /datafile/orcl/redo01.log
Block recovery completed at rba 1.129.16, scn 7.3837505504
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_4504.trc  (incident=336201):
ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_336201/orcl_m000_4504_i336201.trc
Fri Jan 05 10:38:47 2024
Dumping diagnostic data in directory=[cdmp_20240105103847], requested by (instance=1, osid=4504 (M000)), summary=[incident=336200].
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_4504.trc:
ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
Dumping diagnostic data in directory=[cdmp_20240105103848], requested by (instance=1, osid=4504 (M000)), summary=[incident=336201].
Fri Jan 05 10:39:01 2024

225bd4b2b2e9a638da8715a1d2ae228e.png

对于 ora-00600 错误,我们只能借鉴 MOS 去搜索相关报错了,通过在 MOS 中搜索 ORA-00600 [4194] 来获取相同或相似知识,如下图第二篇 Doc ID 1428786.1 就是我们本次借鉴的文章。

5019699e3b054f201c6fa90f8db87ca8.png

强大的 MOS 网站也提供了一个专门搜索 ORA-600 700 7445 的工具链接,可可以直接在此页面搜索相关错误代码,查找 bug 等等。[ORA-600/ORA-7445/ORA-700 Error Look-up Tool (Doc ID 153788.1)]

d7feac770bd2fed706101ad598899663.png

问题原因

在MOS上找到了一篇文章 (Doc ID 1428786.1)对这个问题有具体的分析与处理过程。

26c47c99f820de9e730ab58ee9ff7f88.png

8d912bca32b702d4bbb20e3137aea1fe.png

在数据库崩溃之前,alert.log 中出现了以下错误。ora - 00600:内部错误代码,参数:[4194 ], [#], [#], [], [], [], [], [] 错误表明在重做记录和回滚(撤消)记录之间检测到不匹配,这个问题通常发生在断电或硬件故障导致数据库崩溃的情况下。这不正是符合我们上周五凌晨断电的问题吗? 那么一起来看看处理办法吧。

处理过程

根据(Step by step to resolve ORA-600 4194 4193 4197 on database crash (Doc ID 1428786.1)文档中提供的方法尝试恢复数据库。

1、创建pfile(nomount)

SQL> create pfile='/u01/pfile.ora' from spfile;
create pfile='/u01/pfile.ora!from spfile
*
ERROR at Tine 1:
ORA-07391: sftopn: fopen error, unable to opentext file.
u01/app/oracle/product/11.2.0dbhome_1/dbs/spfileorc1.ora
ERROR at Tine 1:ORA-07391: sftopn: fopen error, unable to opentext file.
SQL> show parameter spfile:
NAME           TYPE            VALUE
-----------   -------------   -------------------------------------------------------------------
spfile           string              /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorc1.ora
[oracle@localhost dbs]$ strings spfileorcl.ora > initorcl.ora

这里也没法直接在 nomount 下创建 pfile,索性直接通过 strings 命令将 spfile 内容写入到 pfile 里,然后检查 initorcl.ora 参数内容是否出现换行、空格等错误格式加以修改。

2、修改 pfile

添加以下参数:

undo_management=manual
event='10513 trace name context forever, level 2'

3、使用 restrict 模式启动

关闭数据库并用 pfile 启动:
编者注:如果 pfile 在默认的 dbs 目录下,启动时也可不用指定路径就能访问。

SQL> startup restrict pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora'
ORACLE instance started.
Total System Global Area 5010685952 bytes
Fixed Size                  2261848 bytes
Variable Size             989858984 bytes
Database Buffers         4009754624 bytes
Redo Buffers                8810496 bytes
ORA-00205: error in identifying control file, check alert log for more info
如上错误,是由于 strings 时控制文件换行了导致的错误而没有察觉。
vi initorcl.ora


*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'(发现控制文件换行了)
修改完重新启动.
SQL> startup restrict pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora'
ORACLE instance started.
Total System Global Area 5010685952 bytes
Fixed Size                  2261848 bytes
Variable Size             989858984 bytes
Database Buffers         4009754624 bytes
Redo Buffers                8810496 bytes
Database mounted.
Database opened.
SQL>

查看回滚段:

SQL>  select tablespace_name,status,segment_name from dba_rollback_segs where status !='OFFLINE';


TABLESPACE_NAME      STATUS                           SEGMENT_NAME
------------------ ------------------------- ------------------------------------------------------------
SYSTEM               ONLINE                           SYSTEM
...... 等等

这一点非常重要 - 我们希望所有撤消段都处于离线状态 - SYSTEM 将始终在线。如果有任何 "部分可用 "或 “需要恢复”,需要另当别论。如果全部脱机,则继续下一步。

4、创建新的 undo 表空间

SQL> select tablespace_name,file_name,bytes/1024/1024 mb ,autoextensible from dba_data_files order by tablespace_name;


TABLESPACE_NAME      FILE_NAME                                                            MB AUTOEX
-------------------- -------------------------------------------------------- ---------- ----
SYSAUX               /u01/app/oracle/oradata/orcl/sysaux01.dbf                490 YES
SYSTEM               /u01/app/oracle/oradata/orcl/system01.dbf                740 YES
UNDOTBS1             /u01/app/oracle/oradata/orcl/undotbs01.dbf                30 YES
USERS                /u01/app/oracle/oradata/orcl/users01.dbf                    5 YES


SQL> create undo tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 30G; 


Tablespace created.


Using your Original spfile:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

这里如果有默认的 pfile 存在于 dbs 目录下,我们需要将其 mv 重命名,防止使用 pfile 启动。

[oracle@localhost ~]$ mv /u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora /u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora_bak20240111
[oracle@localhost ~]$ sqlplus / as sysdba


SQL> startup nomount      
ORACLE instance started.
Total System Global Area 5010685952 bytes
Fixed Size                  2261848 bytes
Variable Size             989858984 bytes
Database Buffers         4009754624 bytes
Redo Buffers                8810496 bytes


SQL> alter system set undo_tablespace=undotbs2 scope=spfile;
File created.


System altered.
SQL> 
SQL> drop tablespace undotbs1 including contents and datafiles;


Tablespace dropped.

5、使用 spfile 重新启动数据库

SQL> shutdown immediate;
Ora-01507 Database not mounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total system Gobal Area  7532736512    bytes
Fixed Size                 2267912    bytes
Variable size            2097153272    bytes
Database Buffers        5419040768    bytes
Redo Buffers              14274560    bytes  
Database mounted.
Database opened.
SQL> 
set line  240 
col HOST_NAME for a30 
select INSTANCE_NAME,HOST_NAME,VERSION,STARTUP_TIME,STATUS from gv$instance; 
SQL> 
INSTANCE_NAME    HOST_NAME                      VERSION           STARTUP_TIME        STATUS
---------------- ------------------------------ ----------------- ------------------- ------------
ORCL             localhost                      11.2.0.4.0        2024-01-05 12:38:48 OPEN


SQL> select sum(bytes)/1024/1024/1024 Gb from dba_segments; 


        GB
----------
30.7781982


SQL> select inst_id,count(*),status  from gv$session where type<>'BACKGROUND' group by inst_id,status order by 1; 


   INST_ID   COUNT(*) STATUS
---------- ---------- --------
         1          2 ACTIVE
         1        108 INACTIVE

数据库正常启动,也可正常查询,alert 日志再无 ORA-00600 错误,算是业务恢复正常。

参考文章

Doc ID 1428786.1 https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=447276702637698&id=1428786.1&_afrWindowMode=0&_adf.ctrl-state=1co1wx0pfd_4 


Step by step to resolve ORA-600 4194 4193 4197 on database crash (Doc ID 1428786.1)

最后说一下微信群,这几年一直为大多数网友们提供数据库相关技术咨询与支持,但由于个人能力有限,精力有限,同时也是一个打工者,上班时间要以搬砖为重,可能有一些朋友的问题没有得到回答,这也是建立微信群的目的,通过微信群为大家提供便利(PS:那些考证的买云服务的请绕道,一经发现全网拉黑;还有那些打算获取个人流量涨粉的,后面也会有一定的限制;)微信群就是为了提供技术交流的。

微信群社区

提供怎么的便利呢,因为微信公众号没有留言功能,互动体验感不是很好,所以建立了我微信公众号同名的群社区,在微信群里为大家提供更加友好的交流环境。于是在去年年中的时候建立了微信群,目前已经扩展到②群,也邀请了行业内的一些大佬,包括十几位 ACE(Oracle、MySQL、PG 方向),几位 Oracle 原厂工程师、前 Oracle 工程师,几十位 OCM、OCP 等大多数行业大佬,同时也邀请了几位 MySQL 大佬及 PG 大佬,几个月以来群里每天基本上都有聊天信息,算是我见到的最活跃的社群了,两个小时不看群,就一堆消息,目前②群还有一些坑位,限时免费开放,同时也会不定期在群里举行抽奖送书活动,如果有感兴趣的朋友可以添加我微信【JiekeXu_DBA】私聊我进群,谢谢。

2bc66fb2a44dea48fc6b5d877a22ec71.jpeg

全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我公众号【JiekeXu DBA之路】,第一时间一起学习新知识!以下四个地址可以找到我,其他地址均属于盗版侵权爬取我的文章,而且代码格式、图片等均有错乱,不方便阅读,欢迎来我公众号或者墨天轮地址关注我,第一时间收获最新消息。

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

9ae01b2635194b7244385b56d0aa0e00.gif

分享几个数据库备份脚本

一文搞懂 Oracle 统计信息
 
 

我的 Oracle ACE 心路历程

Oracle 主流版本不同架构下的静默安装指南
 
 

关机重启导致 ASM 磁盘丢失数据库无法启动

Oracle SQL 性能分析(SPA)原理与实战演练
 
 

Oracle 11g 升级到 19c 需要关注的几个问题

Windows 10 环境下 MySQL 8.0.33 安装指南

SQL 大全(四)|数据库迁移升级时常用 SQL 语句

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

Oracle 大数据量导出工具——sqluldr2 的安装与使用

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践

在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐