Transactions might be incomplete either because the server crashed or a resource manager crashed. It is essential to complete these stranded transactions and recover from the failures. Application Server is designed to recover from these failures and complete the transactions upon server startup.
While performing the recovery, if some of the resources are unreachable the server restart may be delayed as it tries to recover the transactions.
When the transaction spans across servers, the server that started the transaction can contact the other servers to get the outcome of the transactions. If the other servers are unreachable, the transaction uses the Heuristic Decision field to determine the outcome.
For Oracle, the database user for an XA datasource requires necessary permissions to be able to recover any transactions after Application Server has crashed and has been restarted. The Oracle permissions required on various tables for transaction recovery are:
SELECT permissions on DBA_PENDING_TRANSACTIONS, PENDING_TRANS$, DBA_2PC_PENDING and DBA_2PC_NEIGHBORS tables
EXECUTE permissions on DBMS_SYSTEM table
In the tree component select the Configuration node.
Select the Transaction Service node.
To enable the recovery of incomplete transactions, check the Recover in the On Restart field.
Set the amount of time, in seconds, the Application Server tries to connect to the unreachable server in the Retry Timeout field. The default value is 10 minutes (600 seconds).
Set the policy for unreachable servers in a transaction in the Heuristic Decision field.
Unless there is a good reason to set this field to Commit, leave Heuristic Decision set to Rollback. Committing indeterminate transactions can compromise the data integrity of your application.
Restart the Application Server.