百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

oracle 11g中RAC常见的4个bug(oracle12c rac)

sinye56 2024-10-03 00:40 11 浏览 0 评论

概述

今天分享下RAC实例崩溃的4个常见bug,下面版本适用于oracle 版本11.2.0.1 和更高版本,主要是做一个备忘,方便以后直接找解决方式。


ORA-29770 LMHB终止实例

1、报错:

LMON (ospid:31216) waits for event 'control file sequential read' for 88 secs.
Errors in file /Oracle/base/diag/rdbms/prod/prod3/trace/prod3_lmhb_31304.trc(incident=2329):
ORA-29770: global enqueue process LMON (OSID 31216) is hung for more than 70seconds
LMHB (ospid: 31304) is terminating the instance.
或
LMON (ospid: 8594) waits for event 'control file sequential read' for 118 secs.
ERROR: LMON is not healthy and has no heartbeat.
ERROR: LMHB (ospid: 8614) is terminating the instance.

2、思路:

LMON 等待读取控制文件,导致LMHB 使实例崩溃

3、解决方案:

Bug 8888434 已在 11.2.0.2 及以上版本 中得到修正

Bug 11890804 已在 11.2.0.3及以上版本中得到修正


ORA-481导致的实例崩溃

1、报错:

1. PMON (ospid:12585): terminating the instance due to error 481

LMON 进程跟踪文件显示:

Begin DRM(107) (swin 0)
* drm quiesce <kjxgmrcfg: Reconfiguration started, type 6 

LMS<x> 进程跟踪文件显示:

2011-07-05 10:53:44.218905 : Start affinity expansion for pkey 81885.0
2011-07-05 10:53:44.498923 : Expand failed: pkey 81885.0, 229 shadowstraversed, 153 replayed 1 retries

2. PMON (ospid: 4915562): terminating the instance due to error 481

Sat Oct 01 19:21:37 2011

System state dump requested by (instance=2, osid=4915562 (PMON)),summary=[abnormal instance termination].

2、思路:

lmon进程是rac中一个非常关键的进程,主要负责集群之间的健康检查,提供gcs服务,其中当lmon出现异常时,会触发oracle级别的io fencing。

LMON主要借助两种心跳机制来完成健康检查:

1) 节点间的网络心跳(NetworkHeartbeat):可以向节点定时的发送ping包检测节点状态,如果能在规定时间内收到回应,就认为对方状态正常

2) 通过控制文件的磁盘心跳(ControlfileHeartbeat):每个节点的CKPT进程每隔3秒更新一次控制文件一个数据块,这个数据块叫做CheckpointProgress Record,控制文件是共享的,所以实例间可以相互检查对方是否及时更新来判断。

3、解决方案:

1. Bug 11875294 已在 11.2.0.3 中得到修正,绕过问题的方法是:

通过设置_gc_read_mostly_locking=FALSE 来禁用read mostly。

2. 修正 HAIP 问题,

11g的DRM引入了read mostly locking的机制,它会基于对象的global operation历史。

ps:

read mostly locking机制,能减少读访问的消息传递和CPU消耗,但是写访问就会比传统的cache fusion locking机制消耗更多的IO。

oracle的cache层记录着每个对象上的S lock和X lock的数量,如果某个节点打开了大量的S lock并且很少了的X lock,并且block传输的比较少,那么这个对象在这个节点上就是read mostly了。当read mostly发生的时候,对象的共享就停止了,并且block不再通过interconnect进行传输(除非block被修改)。

当一个对象被定义成read mostly,他会被master node授予在所有节点上的S affinity lock,这意味着所有的节点都被“提前”授予了该block的读访问权限,因此,减少了在各个节点间互相传递S lock的消息量。

总而言之,clsuster将会在节点数多,且X lock请求少的情况,因为read-mostly特性而收益。但是当X lock请求增加的事情,性能会急剧的降低。从另一方面说,如果你的节点数比较少,那么或许你从read mostly特性那里得不到很多好处。

而由于read mostly会消耗比较多的IO,这个时候你就要估计你一下你的IO情况了,如果你的块和消息传递的收益小于IO负载变重的情况,或者你已经处于IO压力很大的情况下,不建议开启read mostly的特性了,你可以禁用read mostly的特性。设置方式是:_gc_read_mostly_locking=FALSE


ORA-600[kjbmprlst:shadow]、ORA-600[kjbrref:pkey]、ORA-600[kjbmocvt:rid]、[kjbclose_remaster:!drm]、ORA-600 [kjbrasr:pkey] 导致的实例崩溃

1、报错:

由于 ORA-600[kjbmprlst:shadow]、ORA-600[kjbrref:pkey]、ORA-600[kjbmocvt:rid]、[kjbclose_remaster:!drm]或 ORA-600 [kjbrasr:pkey] 导致 RAC 实例崩溃

2、思路:

这一组 ORA-600 与 DRM(dynamic resourceremastering)消息或 read mostly 锁有关。涉及多个 bug,包括:

Document 9458781.8 Missing close message tomaster leaves closed lock dangling crashing the instance with assorted Internalerror 
Document 9835264.8 ORA-600 [kjbrasr:pkey] /ORA-600 [kjbmocvt:rid] in RAC with dynamic remastering
Document 10200390.8 ORA-600[kjbclose_remaster:!drm]in RAC with fix for 9979039
Document 10121589.8 ORA-600[kjbmprlst:shadow] can occur in RAC
Document 11785390.8 Stack corruption /incorrect behaviour possible in RAC
Document 12408350.8 ORA-600 [kjbrasr:pkey]in RAC with read mostly locking
Document 12834027.8 ORA-600[kjbmprlst:shadow] / ORA-600 [kjbrasr:pkey] with RAC read mostly locking

3、解决方案:

上述大部分 bug 都在 11.2.0.3 中得到了修正,安装 11.2.0.3 补丁集应该可以避免这些 bug,除了 Bug 12834027,此 bug 将在 12.1 中进行修正。绕过这个 bug 的方法是:

禁用 DRM或禁用read mostly

例如:设置 "_gc_read_mostly_locking"=FALSE

在11g中,同样可以使用如下方式禁用DRM,强烈建议关闭:

alter system set "_gc_policy_time"=0 scope=spfile;

然后同时重启所有实例生效。如果不想完全禁用DRM,但是需要禁用read-mostly locking或者reader bypass的机制。可以使用如下命令:

--disable read-mostly locking

alter system set "_gc_read_mostly_locking"=false scope=spfile sid='*';

--disable reader-bypass

alter system set "_gc_bypass_readers"=false scope=spfile sid='*';

Oracle给出的Oracle11g下的调整:

alter system set "_gc_policy_time"=0 scope=spfile sid='*';

alter system set "_gc_undo_affinity"=false scope=spfile sid='*';


启用flash cache后产生kcldle/kclfplz/kcbbxsv_l2/kclfprm,导致实例崩溃

1、报错:

警报日志中报告了 ORA-7445[kcldle]

ORA-7445[kclfplz]

ORA-7445[kcbbxsv_12]

ORA-744[kclfprm]

2、思路:

它们是由不同的 bug 引起的,而这些bug都归结为 基础bug Bug 12337941 Dumps on kcldle / kclfplz /kcbbxsv_l2 / kclfprm using flash

3、解决方案:

此 bug 已在 11.2.0.3 中得到修正,可以选择安装补丁集或使用以下方法绕过这个问题:

禁用 Flash Cache

这个功能其实是EXADATA引入的,这也是EXADATA提高IO性能的又一利器。不过即使不是EXADATA,在11.2中也可以设置该功能,且这个功能的设置并不复杂。

11.2中提供了两个参数来设置FLASH CACHE:其中DB_FLASH_CACHE_SIZE用来设置FLASH CACHE的大小,而DB_FLASH_CACHE_FILE设置文件的位置。

在操作系统上将FLASHCACHE挂成裸设备,然后添加到单独的ASM磁盘组中或直接挂载到操作系统上,然后通过DB_FLASH_CACHE_FILE指定ASM或操作系统目录下的文件既可。

需要注意的是,DB_FLASH_CACHE_FILE不像其他参数一样,对于ASM只需要指定磁盘组的名称既可,而必须通过手工的方式在ASM磁盘组上建立对应的目录,在设置参数的过程中,目录并不会自动创建,不过指定的文件名并不需要存在,Oracle会根据DB_FLASH_CACHE_SIZE的大小自动创建文件。

SQL> alter system setdb_flash_cache_size = 30g scope = spfile;
System altered.
SQL> alter system setdb_flash_cache_file = '+REDO/flash/odademo1.flash' scope = spfile sid ='odaenmo1';
System altered.
SQL> alter system setdb_flash_cache_file = '+REDO/flash/odademo2.flash' scope = spfile sid ='odaenmo2';
System altered.

需要注意,对于RAC而言,各个节点使用独立的FLASH CACHE文件,因此需要单独设置。


如果是用oracle11g的话还是比较建议大家用11.2.0.4版本,相对比较少bug,比较稳定。后面会分享更多关于DBA方面的内容,感兴趣的朋友可以关注下!!

相关推荐

linux 查看当前应用内存状况,以及内存参数含义

1、查看进程号ps-ef|greptomcat2、查看当前内存分配,200ms打印一次jstat-gc进程号2001jstat-gc344802001S0CS1C...

如何显示 Linux 系统上的可用内存?这几个命令很好用!

在Linux系统中,了解可用内存是优化系统性能、故障排查以及资源管理的重要一环。本文将详细介绍如何在Linux系统上显示可用内存,包括多种方法和工具的使用。在讨论可用内存之前,我们需要了解一些...

Linux 下查看内存使用情况方法总结

Q:我想监视Linux系统的内存使用情况,在Linux下有哪些视图或者命令行工具可用呢?在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内...

2、linux命令-用户管理

linux命令-用户管理用户切换[root@eric~]#sueric#切换到用户eric[eric@ericroot]$[eric@ericroot]$su#切换到rootPas...

Centos 7 进入单用户模式详解

1、开机在启动菜单按e进入编辑模式找到linux16行,在最后添加init=/bin/sh编辑完后,按ctrl+x退出2、进单用户模式后,使用passwd修改密码,提示以下错误:passwd:Aut...

每日一个Linux命令解析——newusers

newusers:在Linux系统中,newusers是一个用于批量创建用户的命令。它从一个文件中读取多行用户信息,每行描述一个用户的详细信息,并根据这些信息创建多个用户或对现有用户进行批量修改。一...

openEuler操作系统管理员指南:管理用户与用户组

在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义,其中最重要的是管理员账户,默认用户名是root。同时Linux也...

Linux用户管理

1、用户信息文件/etc/passwdroot:x:0:0:root:/root:/bin/bash第一列:用户名第二列:密码位第三列:用户ID0超级用户UID。如果用户UID...

centos7基础-用户、组、权限管理

用户和组(1)用户、组、家目录的概念linux系统支持多用户,除了管理员,其他用户一般不应该使用root,而是应该向管理员申请一个账号。组类似于角色,系统可以通过组对有共性的用户进行统一管理。每个用户...

LINUX基础 ----------组及用户的概念

在Linux中,用户和组都是非常重要的概念,可以控制文件访问权限和资源的管理。用户是标识一个进程、应用程序或系统管理员的账号,Linux中每个用户用一个用户ID(UID)来标识。对于一个...

从零入门Linux(四)用户与权限管理

在Linux系统中,用户和权限管理是系统安全的重要组成部分。通过合理配置用户和权限,可以确保系统的安全性和资源的合理分配。以下是一些与用户和权限管理相关的常用命令和概念。1.用户管理1.1添加...

如何在 Linux 中管理用户?

在Linux系统中,用户是系统资源的主要使用者,每个用户都有一个唯一的标识符(用户ID)。为了更好地组织和管理用户,Linux还引入了用户组的概念。用户组是用户的集合,有助于更有效地分配权限和资...

在 Linux 中将用户添加到特定组的四种方法

在Linux多用户操作系统中,用户组管理是系统安全架构的基石。通过合理的组权限分配,管理员可以实现:精确控制文件访问权限(chmod775project/)简化批量用户权限管理(setfacl-...

我不是网管 - 如何在Ubuntu Linux下创建sudo用户

Sudo用户是Linux系统的普通用户,具有一定的管理权限,可以对系统执行管理任务。在Linux中,root是超级用户,拥有完全的管理权限,但不建议将root凭证授予其他用户或作为r...

Linux创建普通用户,为密钥方式登录做准备

Hi,我是聪慧苹果8,就是江湖上人见人爱、花见花开,土到掉榨的Linux爱好者,一起学习吧!上一篇关于SSH安全加固的文字,有网友点评通过密钥登录更加安全,先创建一个普通用户,拒绝直接使用密码登录,这...

取消回复欢迎 发表评论: