Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> OCI question: how to release resoure upon login DB fail?
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))
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