共计 8114 个字符,预计需要花费 21 分钟才能阅读完成。
环境: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 的实验来看,并不是都符合推测的算法规则,就不再深究。
: