oracle数据库startup启动报错ORA-27125 unable to create shared memory segment

问题描述:oracle数据库startup启动报错ORA-27125 unable to create shared memory segment,如下所示:
系统:suse 11.2
环境:rac 双节点 + oracle 11.2.0.4
说明:节点1数据库正常,节点2启动异常.
1、问题重现
SQL> startup
ORA-27125: unable to create shared memory segment
Linux-x86_64 Error: 13: Permission denied
Additional information: 589825
Additional information: 2
2、解决过程
2.1、原因查找
a、查/etc/sysctl.conf无问题
b、运用节点1的参数文件启动依然报错
c、对比两节点的/dev/shm文件,发现权限不对.
节点1:

节点2:

oracle数据库startup启动报错ORA-27125 unable to create shared memory segment

2.2、更改权限
在节点2授予shm 777权限,此后startup不再报错.

oracle数据库startup启动报错ORA-27125 unable to create shared memory segment

3、模拟测试
说明:生产环境上通过修改权限解决,现在测试环境进行异常模拟,将此异常了解更清楚.
系统:oel 8.4 64位
数据库:oracle 19.12 + gi
3.1、权限处理
[root@dbserver dev]# ll | grep shm
drwxrwxrwt. 5 root root 5500 Dec 16 16:01 shm
[root@dbserver dev]# chmod g-w shm
[root@dbserver dev]# chmod o-w shm
[root@dbserver dev]# ll | grep shm
drwxr-xr-t. 5 root root 5500 Dec 16 16:01 shm
3.2、重启数据库
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 2415918600 bytes
Fixed Size 9137672 bytes
Variable Size 1107296256 bytes
Database Buffers 1291845632 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
说明:shm权限1755,数据库居然也能正常启动.
4、相关测试
--将shm 777的权限修改为1777.
[root@dbserver dev]# chmod 1777 shm
[root@dbserver dev]# ll | grep shm
drwxrwxrwt. 5 root root 5500 Dec 16 16:01 shm
说明:1777权限表示任何人在此目录拥有写权限,但不能删除别人拥有的文件.
--或使用其它方式修改权限
[root@dbserver dev]# ll | grep shm
drwxrwxrwx. 5 root root 5500 Dec 16 16:01 shm
[root@dbserver dev]# chmod +t shm
[root@dbserver dev]# ll | grep shm
drwxrwxrwt. 5 root root 5500 Dec 16 16:01 shm
--测试shm 1755权限在系统重启后的变化.
[root@dbserver dev]# ll | grep shm
drwxrwxrwt. 5 root root 5500 Dec 16 16:01 shm
[root@dbserver dev]# chmod g-w shm
[root@dbserver dev]# chmod o-w shm
[root@dbserver dev]# ll | grep shm
drwxr-xr-t. 5 root root 5500 Dec 16 16:01 shm
[root@dbserver dev]# reboot

Activate the web console with: systemctl enable --now cockpit.socket

Last login: Fri Dec 16 17:26:02 2022 from 192.168.133.1
--重启系统后,shm恢复1777权限.
[root@dbserver dev]# ll | grep shm
drwxrwxrwt. 5 root root 5500 Dec 16 17:25 shm
5、补充知识
--以下内容来自参考网址.
数据库一直在startup hang住,日志也无报错,此后shutdown abort使用df -Tk 发现/dev/shm文件类型是ext3,且挂载的设备是/dev/sdc1.
[grid@rac2 ~]$ df -Tk
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 ext3 56848636 15510084 38404180 29% /
/dev/sda1 ext3 101086 12606 83261 14% /boot
/dev/sdc1 ext3 4127076 277392 3640040 8% /dev/shm
正常文件类型应如下:
[root@rac2 ~]# df -Tk
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 ext3 56848636 15538780 38375484 29% /
/dev/sda1 ext3 101086 12606 83261 14% /boot
tmpfs tmpfs 2097152 694920 1402232 34% /dev/shm
文件类型和挂载点都应是tmpfs,查fstab确实把/dev/sdc1挂载到了/dev/shm.修改回来后正常启动数据库.
至于启动慢的原因是dev/sdc1是物理磁盘分区,是物理读写.而tmpfs是内存读写.读写速度肯定差异很大.

参考网址:https://developer.aliyun.com/article/294349