Server: sun OS
Db: 9.2.0.8
$ uname -a
SunOS hsun90 5.8 Generic_117350-62 sun4u sparc SUNW,Sun-Fire-V240
$ more /etc/system
……………..
set shmsys:shminfo_shmmax=8589934590
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmsl=1500
set semsys:seminfo_semmns=10000
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
……….
$ ulimit -a
time(seconds) unlimited
file(blocks) unlimited
data(kbytes) unlimited
stack(kbytes) 8192
coredump(blocks) unlimited
nofiles(descriptors) 256
vmemory(kbytes) unlimited
该服务器上有两个db,但是只能启动其中一个,尝试启动第2个的时候会报告如下错误
Connected to an idle instance.
SQL> startup nomount;
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: sskgpbitsper
$ ipcs -a
IPC status from as of Tue Apr 17 09:12:34 MEST 2012
T ID KEY MODE OWNER GROUP CREATOR CGROUP CBYTES QNUM QBYTES LSPID LRPID STIME RTIME CTIME
Message Queues:
T ID KEY MODE OWNER GROUP CREATOR CGROUP NATTCH SEGSZ CPID LPID ATIME DTIME CTIME
Shared Memory:
m 3100 0xb911e7e8 --rw-r----- oracle dba oracle dba 8 222298112 14823 17807 9:07:51 9:08:00 8:28:19
T ID KEY MODE OWNER GROUP CREATOR CGROUP NSEMS OTIME CTIME
Semaphores:
s 4128768 0x607f4428 --ra-r----- oracle dba oracle dba 24 9:08:29 8:28:20s 65539 0x7c4d --ra-ra-ra- root other root other 1 6:43:45 6:23:30
如果没有db运行,随便启动任意一个db都可以成功,但就是不能两个都启动
使用truss跟踪sqlplus
$ truss -aefo sqlplus.log /opt/oracle/u01/app/oracle/product/9.2.0/bin/sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.8.0 - Production on Tue Apr 17 04:53:32 2012
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup nomount;
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: sskgpbitsper
SQL> exit
日志摘录如下
28814: stat("/opt/oracle/u01/app/oracle/product/9.2.0/dbs/spfilePROD025.ora", 0xFFFFFFFF7FFFB368) Err#2 ENOENT
28814: stat("/opt/oracle/u01/app/oracle/product/9.2.0/dbs/spfile.ora", 0xFFFFFFFF7FFFB368) Err#2 ENOENT
28814: brk(0x103511020) = 0
28814: brk(0x103531020) = 0
28814: open("/opt/oracle/u01/app/oracle/product/9.2.0/oracore/mesg/lrmus.msb", O_RDONLY) = 13
28814: fcntl(13, F_SETFD, 0x00000001) = 0
28814: lseek(13, 0, SEEK_SET) = 0
28814: read(13, "1513 "011303\t\t\0\0\0\0".., 256) = 256
28814: open("/opt/oracle/u01/app/oracle/product/9.2.0/dbs/initPROD025.ora", O_RDONLY) = 14
28814: stat("/opt/oracle/u01/app/oracle/product/9.2.0/dbs/initPROD025.ora", 0xFFFFFFFF7FFFAAF8) = 0—挨个搜查pfile,然后lseek读取每个参数
28814: fstat(14, 0xFFFFFFFF7FFFAAB0) = 0
28814: brk(0x103531020) = 0
28814: brk(0x103535020) = 0
28814: ioctl(14, TCGETA, 0xFFFFFFFF7FFFA9EC) Err#25 ENOTTY
28814: read(14, " # # # # # # # # # # # #".., 8192) = 2830
28814: lseek(14, 0, SEEK_CUR) = 2830
28814: close(14) = 0
28814: sysconfig(_CONFIG_NPROC_CONF) = 2
28814: pset_bind(-2, P_PID, -1, 0xFFFFFFFF7FFFB0A4) = 0
………………………….
28814: write(7, " [ 1 7 - A P R - 2 0 1 2".., 45) = 45
28814: lseek(9, 92160, SEEK_SET) = 92160
28814: read(9, "\0\r13A0\0\0\0 V13A6\0\0".., 512) = 512
28814: lseek(9, 13312, SEEK_SET) = 13312
28814: read(9, "\01903A2\0\0\09E03A3\0\0".., 512) = 512
28814: lseek(7, 0, SEEK_CUR) = 92045
28814: lseek(7, 0, SEEK_CUR) = 92045
28814: write(7, " [ 1 7 - A P R - 2 0 1 2".., 40) = 40
28814: shmget(-1190008856, 0, 0) Err#2 ENOENT
28814: shmget(-1190008855, 0, 0) Err#2 ENOENT
28814: shmget(-1190008854, 0, 0) Err#2 ENOENT
28814: shmget(-1190008853, 0, 0) Err#2 ENOENT28814: close(6) = 0
28814: open("/opt/oracle/u01/app/oracle/admin/PROD025/bdump/alert_PROD025.log", O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE, 0664) = 6
………………………….
28814: getuid() = 1025 [1025]
28814: getgid() = 101 [101]
28814: semget(0, 1, 0600|IPC_CREAT|IPC_EXCL) Err#28 ENOSPC
28814: stat("/opt/oracle/u01/app/oracle/admin/PROD025/udump", 0xFFFFFFFF7FFFA040) = 0
28814: getpid() = 28814 [28813]
28814: getpid() = 28814 [28813]
28814: close(5) = 0
28814: lstat("/opt/oracle/u01/app/oracle/admin/PROD025/udump/prod025_ora_28814.trc", 0xFFFFFFFF7FFFA260) Err#2 ENOENT
使用sysdef -i查看更详细的信号量设置,
$ /usr/sbin/sysdef -i | grep -i sem
sys/semsys
sys/sparcv9/semsys
* IPC Semaphores
10 semaphore identifiers (SEMMNI) 10000 semaphores in system (SEMMNS)
30 undo structures in system (SEMMNU)
1500 max semaphores per id (SEMMSL)
100 max operations per semop call (SEMOPM)
10 max undo entries per process (SEMUME)
32767 semaphore maximum value (SEMVMX)
16384 adjust on exit max value (SEMAEM)
其中SEMMNI仅设置为10,是不是该参数过小导致第2个启动的oracle无法分配信号量进而启动失败?
请各位指教