If you are not able to start the Oracle Cluster Synchronization Services
Daemon (OCCSD) in a non-global zone on Solaris 10, I bet you are running
Oracle 10.2.0.3 and higher. In this case, you will see something similar
in the the
/var/adm/messages file--but nothing is coming up:
Apr 26 10:39:51 zonename oracle: [ID 702911 user.error] Oracle Cluster Synchronization Service starting by user request. Apr 26 10:39:52 zonename root: [ID 702911 user.error] Cluster Ready Services completed waiting on dependencies.
Trying to trace the
ocssd.bin process during start-up give you
something similar to:
[...] 12564: 0.0803 setrlimit(RLIMIT_CORE, 0xFFFFFFFF7FFFF900) = 0 12564: 0.0804 priocntlsys(1, 0xFFFFFFFF7FFFF694, 6, 0xFFFFFFFF7FFFF768, 0) Err#1 EPERM [proc_priocntl] 12564: 0.0810 fstat(2, 0xFFFFFFFF7FFFE870) = 0 12564: 0.0811 brk(0x100229E80) = 0 12564: 0.0813 brk(0x10022DE80) = 0 12564: 0.0815 fstat(2, 0xFFFFFFFF7FFFE740) = 0 12564: 0.0816 ioctl(2, TCGETA, 0xFFFFFFFF7FFFE7AC) Err#25 ENOTTY 12564: 0.0818 write(2, " s e t p r i o r i t y :".., 52) = 52 12564: 0.0821 _exit(100)
So, in this case you just hit a privilege restriction, which did not
apply before with older release of Oracle. As clearly mentioned in the
proc_priocntl is not available in the
non-global zone for use by Oracle. A clean solution, available only with
Solaris 10 11/06 (U3) and later, is to use the
property to extend the basic privileges provided by the zone framework.
As stated in the
privileges(5) man page:
PRIV_PROC_PRIOCNTL Allow a process to elevate its priority above its current level. Allow a process to change its scheduling class to any scheduling class, including the RT class.
Interestingly, this seems to be exactly the case for the Oracle Cluster Synchronization Services Daemon:
# zonecfg -z zonename set limitpriv=default,proc_priocntl # zoneadm -z zonename reboot # zlogin zonename "ps -o class,args -p `pgrep ocssd.bin`" CLS COMMAND RT /soft/oracle/10.2.0/asm_1/bin/ocssd.bin
Ok, that's fine right now.