OBIEE High Availability – Presentation Services and Scheduler

February 2nd, 2009 by

Continuing from my previous post, I’d like to talk about how to configure and set up High Availability (HA) for the Presentation Services (PS) and the Scheduler.

Presentation Services

With the BI services already set up in a clustered mode, managed by the Cluster Controller, the next step is to configure a new Cluster-aware ODBC connection. This connection is set to communicate with the Cluster Controller instead of connecting directly to a BI server instance. Each Presentation Server instance in the cluster is then configured to use this new ODBC connection. On a Unix box, the connections are defined in the [OracleBI]/setup/odbc.ini file, but if you are running on a Windows box, use the [Control Panel/Administrative Tasks/Data Sources (ODBC)] Wizard to set up a similar connection (make sure not to use a space/blank in the connection name, as this will not work). This new ODBC connection must be defined on each PS node we are setting up. Although there is nothing stopping you from naming each ODBC DSN differently, I really suggest you keep some constancy and stick to the same name.

The [OracleBIDate]/web/config/instanceconfig.xml file on each node contains the configuration properties of the PS. The first interesting bit is which ODBC connection the PS uses to connect to a BI server. Find and change the <DSN> entry in this file, to refer to the our Cluster DSN instead of the AnalyticsWeb connection. This step needs to be done on each box we are setting up.

Another thing to note is the <CatalogPath> entry. As all the PS need to share the same web catalog, we have to set up a shared directory (much like we did for the BI server repository and global cache) to store the catalog files. I have set up a share on /media/share/Catalog that I use for this purpose. Make sure you copy all your catalog directory structure to this shared directory.

This takes care of what we need to run each PS in our cluster. Restart each service for the changes to take effect.


For the purpose of this write-up I am using a single OC4J instance. I am assuming that you already have an OC4J instance set up, running the analytics web application. In a simple deployment, the configured application is made aware of a single PS instance, and all incoming web requests are forwarded directly to that node. We can reconfigure this so that each PS in our cluster gets a round-robin assignment of the incoming requests. The file in question is called web.xml and can be found in the [OASHOME]/j2ee/home/applications/analytics/analytics/WEB-INF/ directory (if you deployed your WAR file locally in a simple stand-alone OBIEE manner, then OASHOME is replaced by [OracleBI]/oc4j_bi/). Instead of a two pair/value parameters (host and port), we put a single parameter, that lists all the host:port values for the PS nodes.


Make sure you restart the application after you edit this file.


Assuming that you have already gone through the default scheduler configuration on each node, adding these to the cluster is quite straight forward. In the [OracleBI]/server/Config/NQClusterConfig.INI file, add the following line

(obviously replacing my server names with your own). This will basically tell the Cluster Controller that the first server in the list, namely aravis4, will be the main/active scheduler, and aravis1 will be the passive one. Next step is to configure each scheduler to join the cluster. On each node, use the schconfig tool to change the Advanced settings of the Scheduler (Choice 1, 3 and then 3) to set ‘Participant in a Cluster’ to True. Save your settings and exit the tool. Now restart the cluster controllers on each node and then start up the schedulers.


By default, each PS will communicate with the JavaHost running on the local machine, on the default port of 9810. We can, if the mood strikes us, decide to share the JavaHost services on each node with the other nodes, in (you guessed it) a round-robin manner. Would there really be any gain in doing so, though? Certainly we could put the JavaHost services on yet another set of nodes, which would then require that we configure each PS to use those. Again, edit the [OracleBIData]/web/config/instanceconfig.xml file and add the following code within the <ServerInstance> tags

Make sure to restart the JavaHost and PS services on each node. This method can also be used to let the PS service now that the JavaHost is running on a non-default port (i.e. you had a port conflict and changed the port in the [OracleBI]/web/javahost/config/config.xml file.
And remember; When in doubt, reboot. It can save you a lot of time and frustration to restart all the services each time, even though you might think that restarting one service is all that should be required ;)


  1. robert murray Says:

    Do you have sample config file for a clustered environment ie NQSConfig.ini, NQClusterConfig.ini, instanceconfig.xml I done my first pass on configuring a 2 node environment the run-sa is telling me there are errors in the cluster config file but doesn’t say specifically what it doesn’t like

  2. Naveen Says:

    Thanks a lot for the article. We are also looking at the feasibility of clustering the BI environment. I have a question though. Should the catalog be always shared? Can we have two catalogs and some how replicate the changes seamlessly? Is it even possible? Your insight is highly apprecaited.


  3. Borkur Steingrimsson Says:


    What would be your requirement for not sharing the catalog?

    I would really not recommend that you try to split the catalog between the instances. The catalog consists of some thousands of files and synchronizing between only two catalogs could prove to be a major headache. Each user has his/her own subdirectory as well that needs to be kept in synch.

    Adding a 3rd server to the cluster would then make your strategy even more complicated.

    sorry for the late reply. Did you sort out your problem or do you still want me to email you some examples?


  4. Jay A Says:

    Hi Robert,

    Were you able to solve the issue?
    I got problem in mine too.

    Eventhough I already set the REPOSITORY_PUBLISHING_DIRECTORY to my desired location (REPOSITORY_PUBLISHING_DIRECTORY =”/u6/Repository”), when I start the BI application, I got error:

    [nQSError: 47006] Invalid Oracle BI Repository directory :/u01/oracle/product/

    It is still looking for the old directory.

    It’s obvious that I miss something too?


  5. Jay A Says:

    Update on this:
    The BI server went Up when I put back the old directory of repository in /u01/oracle/product/

    But my qusetion now is what directory of Repository will be used by BI during operation?
    Is it in the old directory /u01/oracle/product/, or in the one that I specified in NQSConfig.INI (/u06/Repository)?
    And if I need to update the Repository, in w/c of the directory will I upload?
    If I need to update both, I think I cannot longer call it cluster. Cause one reason I clustered them, not only for fail over but for shared storage also.

  6. Borkur Steingrimsson Says:

    Hello Jay.

    Each BI server expects to find it’s own repository file in the local directory. The other directory is called REPOSITORY_PUBLISHING_DIRECTORY. Notice the ‘PUBLISHING’part. This directory is used by the Master BI server to publish any changes made to the repository file, when the cluster is running.

    When you log in to the BI Cluster, using the Administration tool, you are in fact connecting to the Master node. Any changes you do there are then also written down to the Publishing directory (you will see some different file snippets being created there). when you close your Administration tool you will be notified that each non-master BI server has to be restarted for the changes to take effect. This will force the other nodes to read the changes to the repository.

    If you do all your development off-line then you must ‘deploy’ the new RPD files to each of the servers in the cluster as well as the Publishing directory.

    hope this helps


  7. BIuser Says:

    Hi I had a question about the comment “This connection is set to communicate with the Cluster Controller instead of connecting directly to a BI server instance”
    How can we do that?

  8. BIuser Says:

    in odbc.ini you have to point to one server machine.


    how do i point it to cluster controller?

    Thanks in advance!

  9. Mohit Says:

    Hi all,

    I am installing OBIEE in cluster mode. I am installing 2 bi presenation services, 2 bi server, 2 schedulers. I want to know whether we should define a new port for every component or multiple services can run on a single port.

    Thanks in advance

  10. Borkur Steingrimsson Says:


    You can not run multiple services on the same port. If you intend to have two installations running on the same machine, you have to change the ports for ALL the components on the second instance.


  11. Sandeepa Says:

    The presentation service is in started status but while m starting the presentation service it is not started. What to do suggest.


  12. sarat Says:


    Refresh your services after a while , say after 5-10 mins. Duration depends on the size of your rpd. Sometimes it takes quite a long to UP the services


  13. Satya Says:

    I have modified all configuration files, I was try to start serverice it showing below error.

    2011-11-30 07:46:00
    [nQSError: 47024] The Oracle BI Server participates in a cluster but errors were found in the cluster configuration file.
    [nQSError: 47051] The Oracle BI Server is specified as participating in a cluster, but global cache file storage location, , is invalid.

    Please help me

  14. AK Says:

    Hi Satya,

    Me too, i have this problem, have you fixed it yet?
    It appears that this is very rare.

  15. Ashi Says:

    we have a clustered shared repository with OBIEE services( presentation,oc4j,server,scheduler) at two servers and RPD at shred location.
    But the Analytics application goes down with screen showin ‘LOGGING IN’ message though all the services are in active state but Repository becomes inaccessible in online Mode.The problem is oly solved by physical restart of server(not even restarting the services works).So please can some one help us out here.Which direction to look for RCA.
    Thanks in Advance !!

Website Design & Build: