因信号量问题导致ORA-27154无法启动数据库
测试库执行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
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
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个参数的含义:
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 |
进而可以推断报错提示的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工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

5月13日消息,vivoX100s今晚正式发布,除了出色的影像,新机在信号方面表现也十分强悍。据vivo官方介绍,vivoX100s采用了创新的寰宇信号放大系统,该系统配备了高达21根天线。这一设计基于直屏进行了重新优化,以平衡5G、4G、Wi-Fi、GPS以及NFC等众多信号需求。这使得vivoX100s成为了vivo有史以来信号接收能力最强的手机。新款手机还采用了独特的360°环绕设计,天线分布在机身周围。这一设计不仅增强了信号的强度,还针对日常各种握持姿势进行了优化,避免了因握持方式不当导

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

WiFi已经成为人们日常生活中不可或缺的一部分,随着科技的发展。有时候我们的手机虽然显示有WiFi信号、然而,却无法正常连接上网。今天我们将讨论一些解决这个问题的方法,这个问题困扰着很多人。一:检查WiFi设置首先应该检查一下您的WiFi设置是否正确,如果您的手机无法连接WiFi。并且连接的是正确的WiFi网络,确保您的手机已经打开了WiFi功能。二:重新启动手机和路由器有时候,导致手机无法连接上WiFi、手机和路由器之间的通信可能会出现问题。以解决这个问题、您可以尝试重新启动手机和路由器,这时

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。
