GLOBAL transactions - OCI_TRANS_TIGHT - ORA-00161

From: Massis Isagholian <massis_at_socal.rr.com>
Date: Mon, 1 Oct 2001 11:25:04 -0700
Message-ID: <YA2u7.2$LA4.3541_at_nnrp2.sbc.net>


I have an application that needs to perform multiple concurrent transactions. To accomplish this I'm trying to use Oracle's Global Transactions. However, I'm having a problem with the OCITransStart() function.

I'm trying to establish multiple branches to operate in a single session and I can't figure out why my call to "(OCITransStart(phService, phErr, 0, OCI_TRANS_TIGHT)" is generating an error message. I'm getting error code 161, with the error message "ORA-00161: transaction branch length 536871073 is illegal (maximum allowed 64)." You can see the context of this call in the code segment below.

I'm under a very tight time constraint and I'd appreciate ANY suggestions that you may have.

Massis

  • code segemnt starts here **********************

 if (OCISessionBegin ((OCISvcCtx *) phService, phErr, phSess,   OCI_CRED_RDBMS, OCI_DEFAULT))
{

  ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);   return OCI_ERROR;
 }

 if (OCIAttrSet ((dvoid *) phService, OCI_HTYPE_SVCCTX,   (dvoid *) phSess, (ub4) 0, OCI_ATTR_SESSION, phErr)) // associate user session with SRVCTX
{

  ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);   return OCI_ERROR;
 }

 /* ESTABLISH A NEW TRANSACTION AND EXECUTE SELECT * FROM SIMPLE_TBL WHERE TBL_ID = 1 */  if (OCIHandleAlloc ((dvoid *) phEnv, (dvoid **) &phTransK1,   OCI_HTYPE_TRANS, 0, (dvoid **) 0))
{

  ErrHandler((dvoid *) phEnv, OCI_HTYPE_ENV);   return OCI_ERROR;
 }

 if (OCIAttrSet ((dvoid *) phService, (ub4) OCI_HTYPE_SVCCTX,   (dvoid *) phTransK1, (ub4) 0, OCI_ATTR_TRANS, phErr)) // set server context
{

  ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);   return OCI_ERROR;
 }

 strcpy((char *)txtTransName, "TRANS1");  nTransLen = strlen((char *) txtTransName);

 if (OCIAttrSet ((dvoid *) phTransK1, (ub4) OCI_HTYPE_TRANS,   (dvoid *) "TRANS1", (ub4) 6, OCI_ATTR_TRANS_NAME, phErr)) // set server context
{

  ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);   return OCI_ERROR;
 }

 if (OCITransStart(phService, phErr, 0, OCI_TRANS_TIGHT)) /* START NEW TRANS */
{

  ErrHandler((dvoid *) phErr, OCI_HTYPE_ERROR);   return OCI_ERROR;
 } Received on Mon Oct 01 2001 - 20:25:04 CEST

Original text of this message