Operating system configuration settings for Oracle 11g and Solaris 10

Oracle's Health Check utility recommends that you set certain parameters when installing on Solaris 10. Here is a summary of some common parameters and how to set them:



Host Name
RDA Rule A00320: /etc/hosts Format (Missing host.domain)
This rule checks that the host name is configured the way that Oracle wants to see it. To fix this, edit /etc/hosts to append the domain name to the existing host name. Also include the tab-separated bare host name or the server may not boot:
123.45.678.90   myhost.domain.local        myhost      




Kernel Parameters
Rule A00330: Kernel Parameters OK? (NOEXEC_USER_STACKUndef)
There is a lot of confusion about how to set kernel parameters since things have changed with Solaris 10. This particular parameter can be set in /etc/system under the "set" section:
set noexec_user_stack=1

There is an additional problem with Solaris when you are doing a preinstallation check with RDA. Some modules are only loaded into memory the first time they are accessed by an application. Therefore, when you run the RDA check before Oracle is installed they will not show correctly, even if they are set correctly. To force the modules to load at boot time you can add these lines to /etc/system under the "forceload" section:
forceload: sys/shmsys
forceload: sys/semsys

Reboot after making these changes.





Anonymous Port Ranges
Rule A00402: anon port range OK? (tcp_smallest_anon_port, tcp_largest_anon_port, udp_smallest_anon_port, udp_largest_anon_port)

These parameters can be set from the command line but they are lost on reboot. To set them so they take effect on each reboot, add the following to /etc/inittab:
# Add these lines before the line with svc.startd
tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500 > /dev/console




Ulimits
Rule A00110: ulimits OK? (StackTooSmall, NoFilesTooSmall)

Stack Size must be set using Solaris Project files like so (as root):
projadd -U oracle -K "process.max-stack-size=(priv,32MB,deny)" user.oracle

projadd -U grid -K "process.max-stack-size=(priv,32MB,deny)" user.grid

Check that they were set correctly with this (as root):
#projects -l user.oracle
user.oracle
        projid : 102
        comment: ""
        users  : oracle
        groups : (none)
        attribs: process.max-stack-size=(priv,33554432,deny)

#projects -l user.grid
user.grid
        projid : 103
        comment: ""
        users  : oracle
        groups : (none)
        attribs: process.max-stack-size=(priv,33554432,deny)

You can also check the values logged in as the oracle or grid user like so:
# ulimit -s
32768

To set ulimit for the number of open files you need to set the "hard" and "soft" limits in /etc/system under the "set" section:
* Soft limit for max-file-descriptors (ulimit -Sn)
set rlim_fd_cur=4096
* Hard limit for max-file-descriptors (ulimit -Hn)
set rlim_fd_max=65536

A reboot is required for this to take effect.




Maximum User Processes

During Grid Infrastructure installation Oracle may also complain about the hard limit for maximum user processes being too low. You can set this in /etc/system under the "set" section:
* Hard limit for maximum user processes (ulimit -Hu)
set maxuprc=16384
* This also must be set to allow the above parameter to be set this high
set max_nprocs=30000

A reboot is required for this to take effect.





Shared Memory

The database installation will fail if Oracle is unable to create a shared memory segment large enough for your database instance. To create a shared memory segment large enough you will need to add to (or create) your user.oracle project file like this:
projmod -U oracle -sK "project.max-shm-memory=(priv,25GB,deny)" user.oracle

projmod -U oracle -sK "process.max-stack-size=(priv,33554432,deny)" user.oracle

You should log out the Oracle user and log back in for this to take effect.


If you get errors when trying to start the database using srvctl, (which may happen during the installation) this is because the grid infrastructure (crsd.bin) runs as root, which uses the system project. Make the following changes to match the shared memory settings above:
projmod -s -K "project.max-shm-memory=(privileged,25GB,deny)" system

projmod -s -K "process.max-sem-nsems=(privileged,2048,deny)" system

Also edit /etc/user_attr and append the following to the entry for root:
;project=system

You should reboot the node so the grid infrastructure restarts and gets the new values.