The Problem
We have had some instances where it seemed that starting rac databases through sqlplus caused performance issues (high load on database server ). Restarting the nodes using srvctl seemed to resolve the performance issue. “Is there any difference between using srvctl vs using sqlplus for starting or stopping one or more database nodes.”?
The Solution
The Differences between SQLPLUS and SRVCTL
There are some differences between the use of SQLPLUS and SRVCTL utilities.
– Both should result in the instance startup, but Oracle always recommend the use of the SRVCTL due to the fact that the SRVCTL does more, i.e. SRVCTL will perform a dependency analysis and will inform about cluster related problem if they exist, in a better way than the SQLPLUS which may just say that the instance is not starting. The SRVCTL command will try to start dependent resources (like the vip/ons/listeners) in case they are not running.
– The SRVCTL utility always do some kind of pre-start of the instances such as updating the OCR information instead of waiting for the check script of the instance resource to detect this instance startup and update the OCR.
– With SRVCTL, the root user OS setup is used since inherited from the crsd.bin that will start the instances as oracle user. With SQLPLUS, the oracle user OS setup is used. Having different user setups for root or oracle will make that the performance can be different (fragmented sga or not, another ‘solaris’ project setup, …)
The common part however is that SRVCTL is using SQLPLUS to start/stop the instances.
– The SRVCTL tool manages configuration information that is used by several other Oracle tools. For example, Enterprise Manager uses the configuration information that SRVCTL generates to discover and monitor nodes in your cluster.
– Note that the ‘srvctl start database/instance’ command will not start all enabled and non-running services that have the listed instances either as preferred or available instances in 10g.