We have a client server architecture with Tuxedo 8.1 as middleware. Each Tuxedo server (which has published C++ services) makes a dedicated session with Oracle. Now we have a service that gets processed by one Tuxedo server, and then it invokes another service for which the call goes to the second Tuxedo server. This second service has some logic that creates some rows in a global temp table, puts the rows into a permanent table and then deletes them from the global temporary table. Then the handle comes back to the main service where the transaction gets committed. So both the services are in one transaction scope. But both services are processed by different Tuxedo servers which maintain different sessions with the Oracle database. Now the problem is that sometimes the transaction gives an ORA-14450 error, which comes from the second server. It is not at all consistent, and the same transaction goes through if I drop or recreate the table or boot the Tuxedo server, which gives it a new SID. I have tried both "on commit delete rows" and "on commit preserve rows," but it gives the same error after some time. Are we running into some kind of bug here?
Note that there is no access to the global temp table in the first service. Tuxedo processes only one request on a particular server at a time. So there is no chance of another service using same session id that is being processed by Tuxedo.
This was first published in November 2004