What should I use “srvctl add serverpool” or “crsctl add serverpool”

I saw some doubts as to which utility to use and in what situation we should use.

I searched on some sites related to Oracle and saw that the people is still a bit confused about  which command we should use.

But before start there is a rule to a Clusterware Envorinment:

The “srvctl” is to be used to managed  resources with the prefix  ora.* resources and “crsctl” is to be used  to query or start/stop resources with prefix ora.*, but crsctl is not supported to modify or edit resources with prefix ora.* .

See this note on MOS:

Oracle Clusterware and Application Failover Management [ID 790189.1]

Using crs_* or crsctl commands on resources with the prefix ora.* (resources provided by Oracle) remains unsupported.


So, if you created a resource with “srvctl” this resource should be managed only by “srvctl”. If you create a resource with “crsctl” this resource should be managed using “crsctl” command.

Let’s talk about  the concept Policy-Based Cluster.

Oracle Clusterware 11g release 2 (11.2) introduces a different method of managing nodes and resources used by a database called policy-based management.

With Oracle Clusterware 11g release 2 (11.2) and later, resources managed by Oracle Clusterware are contained in logical groups of servers called server pools. Resources are hosted on a shared infrastructure and are contained within server pools. The resources are restricted with respect to their hardware resource (such as CPU and memory) consumption by policies, behaving as if they were deployed in a single-system environment.

Policy-based management:

  • Enables dynamic capacity assignment when needed to provide server capacity in accordance with the priorities you set with policies
  • Enables allocation of resources by importance, so that applications obtain the required minimum resources, whenever possible, and so that lower priority applications do not take resources from more important applications
  • Ensures isolation where necessary, so that you can provide dedicated servers in a cluster for applications and databases

Applications and databases running in server pools do not share resources. Because of this, server pools isolate resources where necessary, but enable dynamic capacity assignments as required. Together with role-separated management, this capability addresses the needs of organizations that have standardized cluster environments, but allow multiple administrator groups to share the common cluster infrastructure.

This is only a concept.

Therefore Oracle divided this concept to be used for two types of configuration

Policy-Managed Database and  Policy-Based Management to non-database.

Policy-Managed Database

A database that you define as a cluster resource. Management of the database is defined by how you configure the resource, including on which servers the database can run and how many instances of the database are necessary to support the expected workload.

To configure Policy managed database, Oracle already have pre-defined configuration for that.

So, the options are limited and specific to Database resources (such as Services,Database).

For that reason Oracle provided “srvctl add serverpool”.

 $ srvctl add serverpool -h

Adds a server pool to the Oracle Clusterware.

Usage: srvctl add srvpool -g <pool_name> [-l <min>] [-u <max>] [-i <importance>] [-n "<server_list>"] [-f]
 -g <pool_name> Server pool name
 -l <min> Minimum size of the server pool (Default value is 0)
 -u <max> Maximum size of the server pool (Default value is -1 for unlimited maximum size)
 -i <importance> Importance of the server pool (Default value is 0)
 -n "<server_list>" Comma separated list of candidate server names
 -f Force the operation even though some resource(s) will be stopped
 -h Print usage


 Policy-Based Management to non-database.

To configure Non-Database resources, Oracle provided another command with much more options “crsctl add serverpool”.

This allow the DBA explore all options which Policy Managed can supply.

 $ crsctl add serverpool -h
 crsctl add serverpool <spName> [[-file <filePath>] | [-attr "<attrName>=<value>[,...]"]] [-i]
 spName Add named server pool
 filePath Attribute file
 attrName Attribute name
 value Attribute value
 -i Fail if request cannot be processed immediately
 -f Force option


So, we NEVER should not mix the serverpool used by database resource and serverpool used by non-database resource.

Also never use “crsctl” command to change Database Server Pool wich was created by “srvctl”.  Never put a database  in a serverpool created by using “crsctl” command.

Server Pool to database resource must be created by using “srvctl”.

Server Pool to non-database resource must be created by using “crsctl”

Question: Is possible change ora.* resources with “crsctl”?

Yes, It’s possible but not supported by Oracle.

Hope make this clear.



11 Comments on “What should I use “srvctl add serverpool” or “crsctl add serverpool””

  1. martin says:

    hello, at first thank you for very userful blog,
    but you wrote:
    …The “srvctl” is to be used to managed resources with the prefix ora.* resources and “crsctl” is to be used only to non-ora.* resources..

    so how you my doubt
    crsctl modify resource ora.[gr_name].dg -attr AUTO_START= always



    • Levi Pereira says:

      Hi Martin,
      You can change resources with prefix ora.* using crsctl only advised by Oracle Support followed by Tech Notes or Service Request.
      Oracle Support assist you to integrate your own scripts into Oracle Clusterware so that Oracle Clusterware using these scripts will be able to manage the application in terms of successfully starting and stopping the resource registered in Oracle Clusterware. Oracle Support will also assist in registering the application as a resource in Oracle Clusterware using the appropriate user and permission settings. Supported operations therefore typically involve crs_* commands in pre-11g Release 2 versions of Oracle Clusterware, or crsctl commands with Oracle Clusterware 11g Release 2 onwards. Using crs_* or crsctl commands on resources with the prefix ora.* (resources provided by Oracle) remains unsupported.

      See this note on MOS : Oracle Clusterware and Application Failover Management [ID 790189.1]

      Hope that helps. Thanks,
      Levi Pereira


  2. Aman.... says:


    so you mean to say that when we have to put a database resource in the server pool, we should use ‘srvctl’ but for a non-database resource, it should be “crsctl” that should be used ?

    2) Also you mentioned that using the server pools allow us to manipulate the resources on the nodes based on the hardware ? How it is possible? If you would had said using the QOS, I guess I could had made it out but just with the sever pools, I am not too sure that I understood your statement very well. Can you explain it in more detail please?



    • Levi Pereira says:

      Hi Aman,
      Yes..when you need put a database or database resource (i.e resource with ora.* prefix) in a serverpool we must use srvctl.
      All resources without ora.* prefix we should use crsctl.
      The reason behind this is because crsctl give us much more option than srvctl. If we use crsctl on ora.* resources Oracle will have a lot problem with Support due modification o resource ora.*. So srvctl is more limited compared crsctl because many parameter of ora.* resource already are pre-defined by Oracle. (Oracle don’t allow we change that).
      See this test:

      About 2nd Q:

      “The resources are restricted with respect to their hardware resource (such as CPU and memory) consumption by policies, behaving as if they were deployed in a single-system environment.”
      I started with concept of “Policy-Based Cluster”. This above is not about only “serverpool”. Policy-Based Cluster include serverpool and Database QOS.

      Policy-Based Cluster divided in 2 topic:
      Policy-Managed Database – Use serverpool to place database with database QOS (srvctl)
      Policy-Based Management to non-database. – Use serverpool with importance and cardinality to place users scripts or application (crsctl).

      So, serverpool with database QOS allow resources on the nodes based on the hardware .

      Levi Pereira


  3. Marc. says:

    Hello Levy, thanks for your help.
    Most of out databases are standalone and are added into GI as simple applicacion resources, that is, with an start/stop/check script defined into each resource conf. This way we just user crsctl commands to manage this database resources.
    Should we register these ddbb with srvctl commands instead? When we start ddbb We find errors like
    ERROR: failed to establish dependency between database xxxx and diskgroup resource yyyy
    which I guess means some configuration is missing at the OCR because of not registering with srvctl. But we provide resource dependencies (diskgroup, listeners, database resource…) at the resource attribute level manually.
    On the other hand when we have installed a RAC database we had to use srvctl but we find a lot of problems related to role separation.
    What is your point of view about this way of configuring?
    Thanks a lot.


    • Levi Pereira says:

      Hi Marc,
      Whether you’re using for the GI for a Cluster(clusterware) or GI for a Standalone server (Oracle Restart) you should use srvctl.
      Because both otpion of GI (clusterware and Oracle Restart) was designed for it. If the option you trying to use is Supported but is not working you should open a SR.

      I never used scripts to start/stop database if I have the srvctl option supported by Oracle. (I faced some bugs, but Oracle solved all)

      We have a exception when GI does not support srvctl of different version.
      11.2 Oracle Restart cannot manage 10.1.x single instances [ID 954552.1]
      Oracle leaves it quite clear:
      Do not use ‘Oracle Restart’ to manage non-11.2 single-instance Oracle resources (database instances, etc.).

      So, in this case we should use crsctl to register our own scripts of start,stop and check.

      Oracle ACFS does not start or stop automaticaly on Oracle Restart. So in this post below I create my own script to do it. (it a example when you shoud use it)



      • Marc. says:

        Hello Levi, our installation is clusterware, 2 nodes. But most of the database are not RAC but single instances. That is what I mean with “databases are standalone”.
        What we have found is that implementing job role separation is a pain in the neck . Grid user cannot register (srvctl) any instance installed on an ORACLE_HOME that does not belong to grid. And on the other hand oracle user, owner of database, finds a lot of problems when using his own srvctl command from his instance which version may coincide or not with GI software version, problems related to versions, permissions on resources, etc.
        So it is much easier to treat instances as general use applications, even for 11.x versions, using scripts we would use for an 10.x instance.

        Thanks for your comments.


  4. Aman.... says:


    Many thanks for taking the timeout to answer the doubt. Unfortunately, I am not sure that that I still getting the pulse of the the 2nd part.

    1) You mentioned database QOS? But correct me if i am wrong, isn’t QOS is only for Exadata?

    2) Can you please explain the policy based management to non-database a little more?



    • Levi Pereira says:


      Database QOS is a feature of Oracle Database Software 11.2.
      Starting with Oracle Database 11g release 2, you can use server pools to create groups of servers within a cluster to provide workload isolation. A server can only belong to one server pool at any time. Databases can be created in a single server pool, or across multiple server pools. Services Oracle Database QoS Management can make recommendations to move a server from one server pool to another based on the measured and projected demand, and to satisfy the Performance Objectives currently in effect.

      Database Quality of Service (QoS) Management Support
      To support the Database Quality of Service (QoS) Management Server, the Oracle Database Resource Manager and metrics have been enhanced to support fine-grained performance metrics and now have the ability to manage workloads by user-defined performance classes.
      By supporting the Database QoS Management Server, applications sharing a single database or multiple databases within a cluster can be managed discretely to monitor and maintain their service levels. This consolidation reduces hardware, software and management costs while maintaining business objectives.


      Example : Using User-defined Resources
      E.g add the Apache Web server to a specific server pool as a resource using the policy-based deployment scheme.

      Is recommended use policy management for more dynamic configurations when your cluster consists of more than two nodes and if you are using different hardware configuration.

      Oracle Clusterware supports the deployment of applications in access-controlled server pools made up of anonymous servers and strictly based on the desired pool size. Cluster policies defined by the administrator can and must be used in this case to govern the server assignment with desired sizes and levels of importance.

      More detail here:



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s