0

0

因信号量问题导致ORA-27154无法启动数据库

php中文网

php中文网

发布时间:2016-06-07 16:10:25

|

1608人浏览过

|

来源于php中文网

原创

测试库执行startup时提示(11.2.0.1): 查询ORA-27154的错误 : vcD4KPHA+PC9wPgoKPHRhYmxlIHdpZHRoPQ=="100%" border="0" cellpadding="0" cellspacing="0"> Error: ORA-27154Text: post/wait create failed ----------------------------------------------

测试库执行startup时提示(11.2.0.1):

\

查询ORA-27154的错误
喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgoKPHRhYmxlIHdpZHRoPQ=="100%" border="0" cellpadding="0" cellspacing="0">

Error:  ORA-27154
Text:   post/wait create failed 
---------------------------------------------------------------------------
Cause:  internal error, multiple post/wait creates attempted simultaneously 
Action: check errno and contact Oracle Support
提示是一个内部错误,多个post/wait同时请求。

df查看磁盘空间还有很多,不存在占满的情况

查看报错中的semget含义

\

提示segmet的含义是get a semaphore set identifier,即获取一个信号量集标识符。说明此错误可能和未获得信号量有关,No space left on device不是指存储空间,而是指信号量资源。

从MOS的介绍看(949468.1),一系列的报错出现10.1.0.2到11.2.0.2的范围内。给出了示例:

$ ipcs -ls

------ Semaphore Limits --------

max number of arrays = 128

max semaphores per array = 250

max semaphores system wide = 32000

max ops per semop call = 100

semaphore max value = 32767

产生的原因是,从原理上看,32000信号量可用,一个信号量标识符能包含最大250个信号量。但是ipcs命令展示每个信号量标识符仅能让Oracle包含最大156个信号量。

$ ipcs

..

------ Semaphore Arrays --------

key semid owner perms nsems

0x450e15bd 0 root 666 1

0x0000cace 32769 root 666 1

0x358b172c 327683 oracle 660 104

0x9053d038 11075588 oracle 660 156

大同搜索
大同搜索

多语言高质量的AI搜索

下载

0x9053d039 11108357 oracle 660 156

0x9053d03a 11141126 oracle 660 156

0x9053d03b 11173895 oracle 660 156

..

那么可用的最大信号量就是156*128=19968,不是32000。

解决方法增加可包含的信号量,这里根据SEMMNI参数来调整设置。

1. 查询当前kernel的信号量参数值。

# /sbin/sysctl -a " grep sem

2. 修改/etc/sysctl.conf文件的SEMMNI参数。

从kernel.sem = 250 32000 100 128修改为kernel.sem = 250 32000 100 200

3. 使用# /sbin/sysctl -p让修改生效。

结合到我这里的情况,首先查看ipcs的结果:

\

\

数据库启动后,需要从操作系统上分配共享内存和信号量,信号量就相当于OS的内存锁,类似于Oracle的latch(注意Oracle的锁和latch的区别),每个进程需要获取操作系统内存时,需要先获得信号量才能申请内存。

从上述指令可以看到最大可用的信号量是100,信号量标识符集最大是128,呃,这里失误,当时没有查看到ipcs实际的信号量标识符集。这里4个参数的含义:

SEMMSL 100 Defines the minimum recommended value,for initial installation only
The maximum number of sempahores that can be in one semaphore set. It should be same size as maximum number of Oracle processes. 一个信号量集中允许的最大信号量数。需要和Oracle的process个数相同。
SEMMNS 100 Defines the maximum semaphores on the system.
This setting is a minimum recommended value, for initial installation only. The SEMMNS parameter should be set to the sum of the PROCESSES parameterfor each Oracle database, adding the largest one twice, and then adding an additional 10 for each database.
系统允许的最大信号量数,SEMMNS参数应设置为最大的PROCESSES值,再加上额外的10,算出来的总和。(注意这里说明该值是最小的建议值)
SEMOPM 32 Defines the maximum number of operations for each semop call
每次信号量调用的最大操作数。
SEMMNI 128 Defines the maximum number of semaphore sets in the entire system
系统中信号量集的最大值。
可以推测SEMMNS=SEMMSL * SEMMNI。
但上述示例中:100100 * 128,SEMMNS最大允许的信号量(建议最小值)只有100,显然不能满足计算结果的数量。而且从Oracle官方文档看到的对于这几个参数的推荐值

Configuring Kernel Parameters

Verify that the kernel parameters shown in the following table are set to values greater than or equal to the recommended value shown. The procedure following the table describes how to verify and set the values.

Parameter Value File
semmsl

semmns

semopm

semmni

250

32000

100

128

/proc/sys/kernel/sem
SEMMNS是32000,即SEMMSI(250)*SEMMNI(128)的结果。

进而可以推断报错提示的sskgpcreates可能和process数量有关,kernel中和该值有关的参数是SEMMNS,和上述推测的结论相同,即PROCESS过多,但允许的最大信号量过少,两者不匹配,导致No space left on device提示信号量资源不足

解决方法如MOS指点的,修改信号量参数值,可以用:

系统允许包含的最大信号量集)的计算关系,还有就是SEMMNS定义的是Defines the maximum semaphores on the system. This setting is a minimum recommended value,for initial installation only. 即允许的最大信号量,但这个值是用于初始安装的最小推荐值。

3. 借助baidu或google甚至MOS查找问题,可能找到解决方案,但更重要的是能够知道原因,进而了解问题出现的场景,结合自己的问题,确定是同一类之后,再执行操作,一句话:要谨慎。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

12

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

200

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

98

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

15

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

16

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

9

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

56

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

28

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号