环境: HP-UX 11.31 + Oracle 11.2.0.4
现象: 在 hpux 安装 Oracle, 按业务需求配置参数后, 无法启动实例.
报错如下:
- 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
1. 初步定位
2. 验证猜想
3. 深入分析
1. 初步定位
快速判定这是实例就无法启动, 也就是 nomount 这一阶段就无法成功, 首先想到的是参数配置不合理.
经过尝试, 最终发现是 processes 参数设置过高, 导致无法启动实例, 当前期望设置 8000, 测试调整为 7000 就可以成功启动.
去 MOS 搜索 hpux 平台这个错误没有找到结果, 但是却有其他平台的匹配结果:
Database Startup Fails with ORA-27300: OS system dependent operation:semget failed with status: 28 (文档 ID 949468.1)
Instance Startup Fails With Error ORA-27154,ORA-27300,ORA-27301,ORA-27302 (文档 ID 314179.1)
而这些文档的原因基本定位在 sem 相关的内核参数调整上.
2. 验证猜想
找到 HPUX 关于 sem 内核参数的当前设置:
- kctune -h -B semmni=4096
- kctune -h -B semmns=8192
- kctune -h -B semmnu=4092
- kctune -h -B semvmx=32767
这些都是 Oracle 官方文档建议的设置值, 但现在看来, 目前这些内核参数的设置不能满足此时用户业务所要求的 processes 值.
网上搜索到这些内核参数值的说明:
种种迹象都表明和 sem 参数有关, 那么尝试将 semmni 和 semmns 参数都修改为 2 倍值, 即 8192 和 16384.
- kctune -h -B semmni=8192
- kctune -h -B semmns=16384
-- 重启操作系统生效:
shutdown -ry 0
之后再次将 processes 设置为 8000, 已经可以正常启动实例, 问题解决.
3. 深入分析
当 semmni 和 semmns 参数值是官方文档默认值时, 按业务要求设置 process 为 8000, 无法启动实例. 将 semmni 和 semmns 参数值都设置为二倍值之后, 再测试将 process 设置为 16000 时, 同样无法启动实例.
可以看到的确这个 sem 信号量和 processes 有着某种关联, 而且此时启动到 nomount 状态, 实际并没有用户连接, 说明信号量是预先分配的, 下面来具体验证.
以下所有测试都是启动数据库到 nomount:
3.1 设置 processes 值为默认值 150
此时 ipcs 观察到的结果:
Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun 1 16:57:15 2018
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
- Semaphores:
- s 0 0x4f1c06da --ra------- root root root root 1 11:44:05 11:44:05
s 1 0x411c01b6 --ra-ra-ra- root root root root 1 11:44:07 11:44:05
- s 2 0x4e0c0002 --ra-ra-ra- root root root root 2 11:44:07 11:44:05
- s 3 0x41203bb5 --ra-ra-ra- root root root root 2 no-entry 11:44:05
- s 4 0x01090522 --ra-r--r-- root root root root 1 no-entry 11:44:11
s 8197 0x00a5c581 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8198 0x00a5c582 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8199 0x00a5c583 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8200 0x00a5c584 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8201 0x00a5c585 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8202 0x00a5c586 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8203 0x00a5c587 --ra------- sfmdb users sfmdb users 17 16:32:32 11:44:13
s 12 0x4914942f --ra-r--r-- root root root root 1 11:44:32 11:44:32
s 13 0x410c030b --ra-ra-ra- root root root root 1 11:44:33 11:44:33
s 196622 0x5c23a1bc --ra-r----- oracle dba oracle dba 154 no-entry 16:47:46
可以看到 NSEMS 的数值是 154, 此时可以满足 150 的 processes.
3.2 设置 processes 值为 8000
此时 ipcs 观察到的结果:
Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun 1 17:00:50 2018
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
- Semaphores:
- s 0 0x4f1c06da --ra------- root root root root 1 11:44:05 11:44:05
s 1 0x411c01b6 --ra-ra-ra- root root root root 1 11:44:07 11:44:05
- s 2 0x4e0c0002 --ra-ra-ra- root root root root 2 11:44:07 11:44:05
- s 3 0x41203bb5 --ra-ra-ra- root root root root 2 no-entry 11:44:05
- s 4 0x01090522 --ra-r--r-- root root root root 1 no-entry 11:44:11
s 8197 0x00a5c581 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8198 0x00a5c582 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8199 0x00a5c583 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8200 0x00a5c584 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8201 0x00a5c585 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8202 0x00a5c586 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8203 0x00a5c587 --ra------- sfmdb users sfmdb users 17 16:32:32 11:44:13
s 12 0x4914942f --ra-r--r-- root root root root 1 11:44:32 11:44:32
s 13 0x410c030b --ra-ra-ra- root root root root 1 11:44:33 11:44:33
s 229390 0x5c23a1bc --ra-r----- oracle dba oracle dba 2001 no-entry 17:00:44
s 49167 0x5c23a1bd --ra-r----- oracle dba oracle dba 2001 no-entry 17:00:44
s 49168 0x5c23a1be --ra-r----- oracle dba oracle dba 2001 no-entry 17:00:44
s 49169 0x5c23a1bf --ra-r----- oracle dba oracle dba 2001 no-entry 17:00:44
s 8210 0x5c23a1c0 --ra-r----- oracle dba oracle dba 2001 no-entry 17:00:44
可以看到 NSEMS 值为 2001, 一共 5 组, 此时可以满足 8000 的 processes.
3.3 设置 processes 值为 16000
此时 ipcs 观察到的结果:
Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun 1 17:10:22 2018
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
- Semaphores:
- s 0 0x4f1c06da --ra------- root root root root 1 11:44:05 11:44:05
s 1 0x411c01b6 --ra-ra-ra- root root root root 1 11:44:07 11:44:05
- s 2 0x4e0c0002 --ra-ra-ra- root root root root 2 11:44:07 11:44:05
- s 3 0x41203bb5 --ra-ra-ra- root root root root 2 no-entry 11:44:05
- s 4 0x01090522 --ra-r--r-- root root root root 1 no-entry 11:44:11
s 8197 0x00a5c581 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8198 0x00a5c582 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8199 0x00a5c583 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8200 0x00a5c584 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8201 0x00a5c585 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8202 0x00a5c586 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8203 0x00a5c587 --ra------- sfmdb users sfmdb users 17 16:32:32 11:44:13
s 12 0x4914942f --ra-r--r-- root root root root 1 11:44:32 11:44:32
s 13 0x410c030b --ra-ra-ra- root root root root 1 11:44:33 11:44:33
可以看到, 因为 nomount 报错: ORA-27154,ORA-27300,ORA-27301,ORA-27302, 实例启动不成功, 所以没有 oracle 用户的任何分配.
3.4 设置 processes 值为 14000
此时 ipcs 观察到的结果:
Superdome10@oracle[/oradata/orcl]ipcs -as
IPC status from /dev/kmem as of Fri Jun 1 17:11:53 2018
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
- Semaphores:
- s 0 0x4f1c06da --ra------- root root root root 1 11:44:05 11:44:05
s 1 0x411c01b6 --ra-ra-ra- root root root root 1 11:44:07 11:44:05
- s 2 0x4e0c0002 --ra-ra-ra- root root root root 2 11:44:07 11:44:05
- s 3 0x41203bb5 --ra-ra-ra- root root root root 2 no-entry 11:44:05
- s 4 0x01090522 --ra-r--r-- root root root root 1 no-entry 11:44:11
s 8197 0x00a5c581 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8198 0x00a5c582 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8199 0x00a5c583 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8200 0x00a5c584 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8201 0x00a5c585 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8202 0x00a5c586 --ra------- sfmdb users sfmdb users 17 11:44:13 11:44:13
s 8203 0x00a5c587 --ra------- sfmdb users sfmdb users 17 16:32:32 11:44:13
s 12 0x4914942f --ra-r--r-- root root root root 1 11:44:32 11:44:32
s 13 0x410c030b --ra-ra-ra- root root root root 1 11:44:33 11:44:33
s 294926 0x5c23a1bc --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 65551 0x5c23a1bd --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 65552 0x5c23a1be --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 65553 0x5c23a1bf --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 24594 0x5c23a1c0 --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 8211 0x5c23a1c1 --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 8212 0x5c23a1c2 --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 8213 0x5c23a1c3 --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
s 22 0x5c23a1c4 --ra-r----- oracle dba oracle dba 1750 no-entry 17:10:55
可以看到, NSEMS 值为 1750, 一共 9 组, 此时可以满足 14000 的 processes.
总结: 通过这个案例, 可以知道 ipcs 看的那个信号量和 process 之间有直接的关联. 咨询我司专家, 这之间还存在某种算法, 但从 HPUX 的实验来看, 并不是都符合推测的算法规则, 就不再深究.
来源: http://www.linuxidc.com/Linux/2018-06/152799.htm