What is REVIVER.sh/FNDREVIVER In Oracle Applications:

FNDREVIVER or REVIVER.SH is a program used to reconnect the forms/internal concurrent manager.

Quick Points to be noted

Situations where reviver.sh will reconnect
1) Momentary disconnection of forms
2) Momentary disconnection of ICM (Concurrent Manager)
3) If the failure is due to a brief network outage, or database issue, the managers are restarted, so the client does not have to restart the managers manually.
4) When ICM can no longer get a database connection, it kills itself and spawns the reviver. Reviver loops every 30 seconds, attempting to login to the database as apps user. Once login is successful, it starts
up the ICM again.


Overground/Features

1) Runs in the background
2) n a Real Applications Cluster (RAC) environment, when the primary node goes down and ICM is set to migrate to the secondary node, the reviver parameter will be passed to the secondary node.
3) Starts when ICM starts
4) <cp_reviver oa_var="s_cp_reviver">enabled</cp_reviver> --- Value in CONTEXT file
5) On a single node concurrent processing system, FNDREVIVER is the only way to recover from a database connection loss.

A bit more detailed

Reviver is used for momentary disconnects in the system where the concurrent managers and/or forms go down, and forms is later reconnected while the concurrent managers are not. FNDREVIVER revives the Internal Concurrent Manager (ICM) when it fails.
When ICM can no longer get a database connection, it kills itself and spawns the reviver. Reviver loops every 30 seconds, attempting to login to the database as apps user. Once login is successful, it starts up the ICM again.

If the failure is due to a brief network outage, or database issue, the managers are restarted, so the client does not have to restart the managers manually.

Reviver is recovery mechanism delivered with ATG RUP4 (patch 4676589), and runs in the background. In a Real Applications Cluster (RAC) environment, when the primary node goes down and ICM is set to migrate to the secondary node, the reviver parameter will be passed to the secondary node.

The easiest way to determine if reviver.sh exists is by checking the $FND_TOP/bin directory.

The variable resides in the context file under 's_cp_reviver' and can be set to "enabled" or "disabled". Based on the value of s_cp_reviver in the context file, AFCPDNR is started with a value of either "enabled" or "disabled" .

The reviver is started when starting the ICM, by passing a parameter reviver="enabled". You do this on the node you start the manager, and if the ICM is set to migrate to the second node, this parameter will be passes to the second node.
A common misconception is that users must start the reviver.sh manually, however this is not the intended use. It is automatically enabled when the parameter REVIVER_PROCESS="enabled" is passed via the adcmctl.sh concurrent manager startup script.

On a single node concurrent processing system, FNDREVIVER is the only way to recover from a database connection loss.

On a two node system (PCP), there is another factor, the Internal Monitor (FNDIMON).The FNDIMON will race to restart the internal manager in a multi node setup, and by the time the reviver starts it will likely see that the ICM is already running and exit accordingly.
FNDIMON checks whether it can connect to the database in order to determine if the ICM is running, and if the database connection is not available it fails to run and exits accordingly. The reviver is a shell script which loops until a connection is obtained, and then starts the manager accordingly. The reviver's job is the last line of defense after a database connection failure, as FNDIMON only works when the database connection is available.

In the event the ICM goes down due to a network outage, then the reviver would be needed to bring the ICM back up.

How to check and Enable reviver in Oracle Applications (Its by default enabled in R12):

The following parameters can be set in the context file, and then autoconfig should be re-run to enable reviver:

Example:
$grep -i s_cp_reviver $CONTEXT_FILE
<cp_reviver oa_var="s_cp_reviver">enabled</cp_reviver>

Reviver Process PID Directory Location (s_fndreviverpiddir)

This variable specifies the path where ICM reviver process pid file will be created. Oracle recommends using a local disk as the PID file location because
the reviver process may run when the network is down.

Example:
<fndreviverpiddir oa_var="s_fndreviverpiddir">/u02/oracle/visappl/fnd/11.5.0/log</fndreviverpiddir>