Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >重启数据库遇到错误ORA-27154,ORA-27300,ORA-27301,ORA-27302

重启数据库遇到错误ORA-27154,ORA-27300,ORA-27301,ORA-27302

作者头像
JiekeXu之路
发布于 2020-12-15 03:45:11
发布于 2020-12-15 03:45:11
1.5K00
代码可运行
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路
运行总次数:0
代码可运行

事情是这样的,新装了一套 Linux 环境下的 19.9 RAC 环境,应用方要求关闭归档。本身此机器上有三个实例,均是近期新建的实例并安装 RU 19.9,先将节点二的实例关闭然后在节点一上关闭归档,前两个实例都完成了且正常启动,当第三个实例关闭归档时,在节点一上是正常启动了,但是在节点二启动数据库则报错了,如下图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
节点2
sqlplus / as sysdba
shutdown immediate;
节点1
sqlplus / as sysdba
archive log list;
alter system switch logfile;
关闭归档
shutdown immediate;
startup mount;
--开启归档模式:
--alter database archivelog;
关闭归档模式:
alter database noarchivelog;
alter database open;
archive log list;
节点2
sqlplus / as sysdba
startup

使用操作系统自带的帮助命令没有查到想要的信息。

网络上搜索则说是由于内核参数 kernel.sem 的问题, 而且与 process 有关,在安装多实例数据库时也会出现如下的错误。第一次在创建多实例时居然没有报错,而且当时也是设置了每个实例的 process 为 8000 重启实例并没有问题,那么 kernel.sem 到底是个什么参数,与 process 有什么样的关系,这引起了我的好奇:

kernel.sem = 250 32000 100 128

SEMMSL: 每个信号集的最大信号数量

SEMMNS:用于控制整个 Linux 系统中信号的最大数

SEMOPM:内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量

SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量

SEMMSL * SEMMNI = SEMMNS 即 250 * 128 = 32000

网络上给出的错误原因:processes 总数超出操作系统信号量总大小。

而我的实际配置是 kernel.sem = 10240 32767 10240 32767

内核参数显示如下: kernel.sem = 10240 32767 10240 32767 ----------->>>> This indicates that 10240 semaphores can be accomodated in an array and maximum of 32767 arrays can be in the system. 这表明一个阵列可以容纳 10240 个信号量,系统中最多可以容纳 32767 个阵列。

这里也可称之为数组,表示每个数组中有 10240 个信号量,总共有 32767 个数组。 So, in total, 335534080 (10240X32767) semaphores can present in the system. 所以,总共有 10240X32767=335534080 个信号量 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@JiekeXu ~]$ ipcs
...
----- Semaphore Arrays --------
key semid owner perms nsems
0x21b9674c 196610 oracle 660 127
0x21b9674d 229379 oracle 660 127
0x21b9674e 262148 oracle 660 127
...

If we assume this is the case here.
假如我们遇到的是这种情况,
So, here, the actual semaphore accommodated per array is not 250, it is 127.
这说明每个数组中不是250,而是127,
So, practically, only 16256 (128*127) can present in the server.
所以只有16256个可用的信号量,这也就是我们计算processes总量远远未达到32000,但是依旧报错的原因,
Solution
解决方案:
kernel.sem = 250 32000 100 128 ---- >>>> This indicates that 250 semaphores can be accomodated in an array and maximum of 128 arrays can be in the system.

So, in total, 32000 (250X128) semaphores can present in the system.

Thus We need to increase the maximum number of arrays that can be present on the server.

Kindly follow the below steps :

-----------------------------------
1. Query the current semaphore values in the kernel
  # /sbin/sysctl -a | grep sem
2. Modify SEMMNI value in the /etc/sysctl.conf.
From
kernel.sem = 250 32000 100 128
To
kernel.sem = 250 32000 100 200

3. # /sbin/sysctl -p

这里建议的是将kernel.sem修改为250X200,,但是中间的32000未改变,
但是根据在support.redhat.com 上的文档
How to increase the number of semaphores:

将sysctl.conf中设置为
kernel.sem = 250 64000 100 256
并sysctl -p ,解决该问题。

根据此文档建议将 kernel.sem 设置为 10240 335534080 10240 32767 然后 sysctl -p 生效后重启数据库便可以正常启动了。

当然,根据网络上的建议将 process 重新改小也可以启动,但是改多小不好评估,由于时间关系这里便没有展开测试。最后看一下各个内核参数的大概意义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@JiekeXu ~]# sysctl -p
fs.aio-max-nr = 1048576  #异步IO请求数目 推荐值是:1048576 其实它等于 1024*1024 也就是 1024K 个
fs.file-max = 6815744  #打开的文件句柄的最大数量,防止文件描述符耗尽的问题
kernel.shmall = 2097152 #共享内存总量 页为单位,内存除以4K所得
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128  #SEMMSL: 每个信号集的最大信号数量 SEMMNS:用于控制整个 Linux 系统中信号的最大数 
# SEMOPM:内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量 SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量
net.ipv4.ip_local_port_range = 9000 65500  #用于向外连接的端口范围
net.core.rmem_default = 262144 #套接字接收缓冲区大小的缺省值
net.core.rmem_max = 4194304  #套接字接收缓冲区大小的最大值
net.core.wmem_default = 262144 #套接字发送缓冲区大小的缺省值
net.core.wmem_max = 1048576  #套接字发送缓冲区大小的最大值
fs.file-max = 6815744
kernel.watchdog_thresh = 30

当semmni和semmns参数值是官方文档默认值时,按业务要求设置process为8000,无法启动实例。将semmni和semmns参数值都设置为二倍值之后,再测试将process设置为16000时,同样无法启动实例。可以看到的确这个sem信号量和processes有着某种关联,而且此时启动到nomount状态,实际并没有用户连接,说明信号量是预先分配的。

设置 processes 值为默认值 150 时,ipcs 可以看到 NSEMS 的数值是 154,此时可以满足 150 的 processes;设置 processes 值为默认值 300 时,ipcs 可以看到 NSEMS 的数值是 152,此时可以满足 300 的 processes;设置 processes 值为 8000 时, ipcs 可以看到 NSEMS 的数值是 8004,此时可以满足 8000 的 processes;设置 processes 值为 16000 时,启动数据库则报错 ORA-27154,ORA-27300,ORA-27301,ORA-27302;根据这个也没法确定两者的关系,但确实两者之间有所关联,而且算法还不简单,现在已经太晚了,只能等后续有时间再看了,晚安,小伙伴们!

参考链接:

https://blog.csdn.net/dsc1245/article/details/80743753

https://www.cnblogs.com/jyzhao/p/9124373.html

Instance Startup Fails With Error ORA-27154,ORA-27300,ORA-27301,ORA-27302 (Doc ID 314179.1)

Database Startup Fails with ORA-27300: OS system dependent operation:semget failed with status: 28 (Doc ID 949468.1)


好咯,今天的分享就到这里了,如果本文对您有一丁点儿帮助,请多支持“在看”与转发,不求小费了哪怕是一个小小的赞,您的鼓励都将是我熬夜写文章最大的动力,让我有一直写下去的动力,最后一起加油,奥利给!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
因信号量问题导致ORA-27154无法启动数据库
提示segmet的含义是get a semaphore set identifier,即获取一个信号量集标识符。说明此错误可能和未获得信号量有关,No space left on device不是指存储空间,而是指信号量资源。
bisal
2019/01/29
9020
Zabbix监控PostgreSQL服务器时unable to create mutex for log file
zabbix_agentd [10555]: cannot create Semaphore: [28] No space left on device
星哥玩云
2022/07/01
4010
从ORA-27300,ORA-27301到ORA-00064
    最近由于session数量增加,需要调整session,也就是要调整process参数。看是比较简单的一个问题,却遭遇了ORA-27300,ORA-27301。因为这个涉及到了有关内核参数kernel.sem的修改。下面是其具体描述。 1、故障现象 OS版本:SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l) DB版本: SQL*Plus: Release 10.2.0.3.0 - Production  需求:Processes参数由1000修改到2000 SQL> startup pfile=/u02/database/MRDB/initMRDB.ora; ORA-27154: post/wait create failed ORA-27300: OS system dependent operation:semget failed with status: 28 ORA-27301: OS failure message: No space left on device ORA-27302: failure occurred at: sskgpcreates 2、故障的分析与解决 #起初咋一看还以为空间不够呢,如下,显然不是空间的问题,其次有个很重要的表示"semget" SQL> ho df -h Filesystem            Size  Used Avail Use% Mounted on /dev/sda3             1.8T  826G  885G  49% / udev                   32G  116K   32G   1% /dev /dev/sda1              99M  9.5M   85M  11% /boot #后台日志如下 Tue Aug  5 18:07:22 2014 Starting ORACLE instance (normal) Tue Aug  5 18:07:22 2014 Errors in file /u02/database/MRDB/udump/mrdb_ora_30366.trc: ORA-27154: post/wait create failed ORA-27300: OS system dependent operation:semget failed with status: 28 ORA-27301: OS failure message: No space left on device ORA-27302: failure occurred at: sskgpcreates #Google了一些文章,描述的是需要调整内核参数kernel.sem,也就是信号量的问题 v2012db02u:~ # grep kernel.sem /etc/sysctl.conf kernel.sem = 1250    32000   100    256     #这个是当前的值 信号量设置示例     SEMMSL应该设置为服务器中实例中具有最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。     SEMMNS参数应设置为SEMMSL*SEMMNI,接上例SEMMSL为5010,SEMMNI的值一般为128,则SEMMNS参数应为(5010*128)=641280。     SEMOPM参数应设置与SEMMSL参数相同,接上例此处应设置为5010     因此对于信号量建议做如下设置     sysctl -w kernel.sem="5010 641280 5010 128" #关于这个参数的具体描述及设置可以参考:Linux 内核参数优化(for oracle) #由于当前服务器存在N个实例,因此给了一个比较大的值,生产环境应慎重修改,如下     v2012db02u:~ # vi /etc/sysctl.conf v2012db02u:~ # sysctl -p     ........... kernel.sem = 7000 1792000 7000 256     ...........  #再次启动,狂汗.... SQL> startup pfile=/u02/database/MR/initMR.ora; ORA-00064: object is too large to allocate on this O/S (1,5150880) v2012db02u:~ > oerr ora 00064 00064, 00000, "object is too large to allocate on this O/S (%s,%s
Leshami
2018/08/13
8210
Linux 内核参数优化(for oracle)
    Oracle 不同平台的数据库安装指导为我们部署Oracle提供了一些系统参数设置的建议值,然而建议值是在通用的情况下得出的结论,并非能完全满足不同的需求。使用不同的操作系统内核参数将使得数据库性能相差甚远。本文描述了linux下几个主要内核参数的设置,供参考。
Leshami
2018/08/14
4.8K0
一次线上zabbix server 挂掉的思考
突然间发现zabbix 挂了,咋发现的呢?报警的世界突然安静了,你就会觉得不妥了。这是运维人员的通病,有报警嫌烦,没报警心里会不安。 1,图形界面上确实显示zabbix server is not running 2,排查zabbix server 日志 tail /var/log/zabbix/zabbix_server.log 发现有如下报警:
三杯水Plus
2020/04/02
6510
【DB笔试面试859】在Oracle中,内核参数kernel.shmall、kernel.shmall等分别代表什么含义?
在Oracle中,内核参数kernel.shmall、kernel.shmall、kernel.shmmni和kernel.sem分别代表什么含义?
AiDBA宝典
2020/08/19
3.2K0
【DB笔试面试859】在Oracle中,内核参数kernel.shmall、kernel.shmall等分别代表什么含义?
HP-UX平台Oracle启动实例遭遇:ORA-27154,ORA-27300,ORA-27301,ORA-27302
环境:HP-UX 11.31 + Oracle 11.2.0.4 现象:在hpux安装Oracle,按业务需求配置参数后,无法启动实例。 报错如下:
Alfred Zhao
2022/05/06
5810
HP-UX平台Oracle启动实例遭遇:ORA-27154,ORA-27300,ORA-27301,ORA-27302
Oracle中的sysctl.conf内核参数
当我们对Oracle进行安装部署时,需要按照相关要求修改OS内核参数,下面对Oracle按照部署时需要修改的相关内核参数进行简单介绍。
沃趣科技
2018/07/02
2K0
Oracle中的sysctl.conf内核参数
连仕彤博客zabbix-agent启动报错No space left on device
前因 在一次机房突然断电之后,登陆到zabbix系统中查看,发现有一台agent没有连接到,登陆到agent机器查看发现zabbix-agent服务无法启动,查看zabbix-agent日志看到如下报错信息。 .... zabbix_agentd [836]: cannot open log: cannot create semaphore set: [28] No space left on device zabbix_agentd [839]: cannot open log: cannot creat
行 者
2018/06/01
3.2K0
zabbix-server突然down掉处理过程
现象 zabbix web图形界面显示zabbix server is not running,进入zabbix服务器 systemctl status zabbix-server显示服务down掉
三杯水Plus
2020/04/02
1.1K0
Linux 下 Oracle 内核参数优化
数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块。而操作系统则是Oracle稳定运行与最大化性能的基石。本文主要描述基于Linux系统下 Oracle 内核参数的配置。
Leshami
2022/03/14
3.2K0
linux kernel引发的oracle问题及解决
最近测试环境的连接数老是不够用,session/process 都相应的从5000提到了8000,但还是不够,而且还是不断有新环境需要增加。最后根据评估,session数需要50000左右 根据粗略的计算来说,process也需要调整,按照如下的公式. sessions=(1.1*process+5) 把semmns做了大幅度的调整,从32000调到了70000 > cat /proc/sys/kernel/sem 250 32000 100 256 > sysctl -a |grep
jeanron100
2018/03/13
1.3K0
linux kernel引发的oracle问题及解决
CentOS7安装Oracle11G完整版图文教程
系统环境:CentOS Linux release 7.4.1708 (Core) Oracle版本:Oracle Database 11g R2
全栈程序员站长
2022/09/02
4.4K0
Linux中/etc/sysctl.conf 内核参数含义
net.ipv4.ip_local_port_range = 9000 65500
知识浅谈
2020/03/25
2.8K0
zabbix报错排错大全 原
zabbix报错排错大全 zabbix报错 1.在启动zabbix-agent 时系统日志输出 PID file /run/zabbix/zabbix_agentd.pid not readable
拓荒者
2019/08/18
2.5K0
Oracle启动报错ORA-27102解决
环境:RHEL5.5 + Oracle 10.2.0.4 此错误一般是因为数据库的初始化参数文件的内存设置不当导致。本例是因为操作系统参数设置问题导致。
Alfred Zhao
2019/05/24
2K0
Linux下安装Oracle的过程和涉及的知识点-系列3
binutils-2.20.51.0.2-5.11.el6 (x86_64) compat-libcap1-1.10-1 (x86_64) compat-libstdc++-33-3.2.3-69.el6 (x86_64) compat-libstdc++-33-3.2.3-69.el6.i686 gcc-4.4.4-13.el6 (x86_64) gcc-c++-4.4.4-13.el6 (x86_64) glibc-2.12-1.7.el6 (i686) glibc-2.12-1.7.el6 (x86_64) glibc-devel-2.12-1.7.el6 (x86_64) glibc-devel-2.12-1.7.el6.i686 ksh libgcc-4.4.4-13.el6 (i686) libgcc-4.4.4-13.el6 (x86_64) libstdc++-4.4.4-13.el6 (x86_64) libstdc++-4.4.4-13.el6.i686 libstdc++-devel-4.4.4-13.el6 (x86_64) libstdc++-devel-4.4.4-13.el6.i686 libaio-0.3.107-10.el6 (x86_64) libaio-0.3.107-10.el6.i686 libaio-devel-0.3.107-10.el6 (x86_64) libaio-devel-0.3.107-10.el6.i686 make-3.81-19.el6 sysstat-9.0.4-11.el6 (x86_64)
bisal
2019/01/29
8290
【新书连载】应用无法连接数据库问题分析
编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友们。 前不久某运营商客户反映某套业务系统在2016年8月4日凌晨出现过无法访问数据库的情况。当接到客户请求之后我才通过V**登录进行日志分析。 首先我分析数据库告警日志发现,8月4日凌晨54分开始出现unable to spawn jobq slave process相关错误,如下所示。 从上述告警日志来看,没有明显的OR
数据和云
2018/03/07
1.7K0
【新书连载】应用无法连接数据库问题分析
进程间通讯(六).semaphore and shared(1)
UNIX/Linux 是多任务的操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间的通讯就很有必要了
franket
2021/09/15
7900
DB2 Linux平台安装 Part 1 Linux环境配置
网络配置多分区和PureScale环境下,需要将所有服务器都添加到hosts文件中
bsbforever
2020/08/18
2.9K0
推荐阅读
相关推荐
因信号量问题导致ORA-27154无法启动数据库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档