Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> OCI question: how to release resoure upon login DB fail?

OCI question: how to release resoure upon login DB fail?

From: music4 <music4_at_163.net>
Date: Thu, 12 Jun 2003 05:05:45 +0800
Message-ID: <bc85ko$dpi@netnews.proxy.lucent.com>


Greetings,

Following are my code to perform db login:

  OCIEnvCreate(&envhp, (ub4)OCI_THREADED, (dvoid *)0, 0, 0, 0,

               (size_t)0, (dvoid **)0);

  OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR,

                 (size_t)0, (dvoid **)0);

/* server contexts */

  OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER,

                 (size_t) 0, (dvoid **) 0);

/* service contexts */

  OCIHandleAlloc((dvoid *)envhp, (dvoid **)&svchp, OCI_HTYPE_SVCCTX,

                 (size_t)0, (dvoid **)0);

  (void)OCIServerAttach(srvhp, errhp, (text *)DbName, (sb4)strlen(DbName), 0);

/* set attribute server context in the service context */
  OCIAttrSet((dvoid *)svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp, (ub4)0,

              OCI_ATTR_SERVER, (OCIError *)errhp);

/* session contexts */

  OCIHandleAlloc((dvoid *)envhp, (dvoid **)&authp, (ub4)OCI_HTYPE_SESSION,

                 (size_t)0, (dvoid **)0);

/* set the username and password of the session */
  OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION, (dvoid *)DbUserName,

             (ub4)strlen((char *)DbUserName), (ub4)OCI_ATTR_USERNAME, errhp);

  OCIAttrSet((dvoid *)authp, (ub4)OCI_HTYPE_SESSION, (dvoid *)DbPassword,

             (ub4) strlen((char *)DbPassword), (ub4)OCI_ATTR_PASSWORD, errhp);

/* login falied, return false(0) */

  if (status = OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, (ub4)OCI_DEFAULT))
  {
   CheckErr_Login(sessionindex, status);    return PPP_FAILURE;
  }

  if (status = OCIAttrSet((dvoid *)svchp, (ub4)OCI_HTYPE_SVCCTX,

                          (dvoid *)authp, (ub4)0, (ub4)OCI_ATTR_SESSION,
errhp))
  {
   CheckErr_Login(sessionindex, status);    return PPP_FAILURE;
  }

The problem I found is that if I shutdown DB, login would fail. But the login seized a fd (opening tnsname.ora). My question is how to release the fd.

Regards,
Evan Received on Wed Jun 11 2003 - 16:05:45 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US