Tuxedo failover does not recover automatically due to incorrect mapping of ORA-00028 to XAER_RMERR (-3) instead of XAER_RMFAIL (-7) (Doc ID 1991777.1)

Last updated on MARCH 20, 2015

Applies to:

Oracle Database - Enterprise Edition - Version 11.2.0.1 to 12.1.0.1 [Release 11.2 to 12.1]
Information in this document applies to any platform.

Symptoms

On failover Tuxedo does not reconnect because the returned error ORA-28 is incorrectly mapped to XAER_RMERR (-3) instead of XAER_RMFAIL (-7). This issue is addressed by the fix for <Bug 17374130>.

Even after application of <Patch 17374130> to the client side an XAER_RMERR can be reported on the next xa_start() after a failed xa_end() depending on whether the session is killed with or without the immediate option.

For the default kill session we essentially get the following behaviour

SQL> connect bankapp1/bankapp1
Connected.
SQL> select user from dual;
select user from dual
*
ERROR at line 1:
ORA-00028: your session has been killed

and then

SQL> select user from dual;
select user from dual
*
ERROR at line 1:
ORA-01012: not logged on
Process ID: 1676
Session ID: 129 Serial number: 7

whereas for the immediate we get

SQL> connect bankapp1/bankapp1
Connected.
SQL> select user from dual;
select user from dual
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 3129
Session ID: 129 Serial number: 9

In the first case the shadow process from the initial client connection is still present even though the session has been killed while in the latter it is not.

From a database perspective the behaviour we observe in terms of the error messages is expected as per the documentation

Terminating an Active Session

If a user session is processing a transaction (ACTIVE status) when you terminate the session, the transaction is rolled back and the user immediately receives the following message:

ORA-00028: your session has been killed

If, after receiving the ORA-00028 message, a user submits additional statements before reconnecting to the database, Oracle Database returns the
following message:

ORA-01012: not logged on

In the XA trace for both cases we see

xaoend: return 100

and then the rollback is attempted and then for the default kill we see

122551.1253650.0:
ORA-01012: not logged on
Process ID: 32319
Session ID: 69 Serial number: 63

and then we see XAER_RMERR returned as per the following

122551.1253650.0:
xaorollback: rtn -3

The expectation would be that this should be a

xaorollback: rtn -7

Cause

Sign In with your My Oracle Support account

Don't have a My Oracle Support account? Click to get started

My Oracle Support provides customers with access to over a
Million Knowledge Articles and hundreds of Community platforms