oci连接mysql_OCI连接数据库超时设置

当使用OCI连接MySQL数据库时,遇到数据库故障导致连接无法建立或长时间卡住的问题。文章探讨了如何在连接失败时设置超时,以便程序能及时返回错误。通过调整OCI函数的超时参数,实现当连接尝试失败时迅速返回错误信息,避免程序阻塞。
摘要由CSDN通过智能技术生成

if(OCIInitialize(OCI_THREADED ,0, 0, 0, 0)!=OCI_SUCCESS)

{

return -1;

}

if(OCIEnvInit( (OCIEnv **) &(p_env), OCI_DEFAULT, 0, 0 )!=OCI_SUCCESS)

{

return -1;

}

if (OCIHandleAlloc ((dvoid *)p_env, (dvoid **)&p_srv,

OCI_HTYPE_SERVER, 0, (dvoid **) 0)!=OCI_SUCCESS)

{

return -1;

}

if(OCIHandleAlloc(p_env, (dvoid **) & (p_err), OCI_HTYPE_ERROR,  0, 0)!=OCI_SUCCESS)

{

return -1;

}

if (OCIServerAttach (p_srv, p_err, (text *)strNodeName,

strlen (strNodeName), OCI_DEFAULT)!=OCI_SUCCESS)

{

return -1;

}

if(OCIHandleAlloc(p_env, (dvoid **) & (p_svc), OCI_HTYPE_SVCCTX, 0, 0)!=OCI_SUCCESS)

{

return -1;

}

if (OCIHandleAlloc ((dvoid *)p_env, (dvoid **)&p_ses,

OCI_HTYPE_SESSION, 0, (dvoid **) 0)!=OCI_SUCCESS)

{

return -1;

}

if (OCIAttrSet ((dvoid *)p_svc, OCI_HTYPE_SVCCTX,

(dvoid *)p_srv, (ub4) 0, OCI_ATTR_SERVER, p_err)!=OCI_SUCCESS)

{

return -1;

}

if (OCIAttrSet ((dvoid *)p_ses, OCI_HTYPE_SESSION,

(dvoid *)strUserName, (ub4)strlen(strUserName),

OCI_ATTR_USERNAME, p_err)!=OCI_SUCCESS)

{

return -1;

}

if (OCIAttrSet ((dvoid *)p_ses, OCI_HTYPE_SESSION,

(dvoid *)strPasswd, (ub4)strlen(strPasswd),

OCI_ATTR_PASSWORD, p_err)!=OCI_SUCCESS)

{

return -1;

}

if (OCISessionBegin (p_svc, p_err, p_ses,

OCI_CRED_RDBMS, OCI_DEFAULT)!=OCI_SUCCESS)

{

return -1;

}

if (OCIAttrSet (  (dvoid *)p_svc, OCI_HTYPE_SVCCTX,

(dvoid *)p_ses, (ub4) 0, OCI_ATTR_SESSION, p_err)!=OCI_SUCCESS)

{

return -1;

}

在用这段代码连接数据库,在数据库故障(个别故障)时,既不能建立连接,也不能返回错误,程序会卡住,此时,使用oracle的sqlplus去连接相应的数据库,现象一样。在这样的场景下,有没有办法设置超时,如果不能正常连接数据库,能够及时返回错误?如果可以,在这样的场景下,如何进行超时的设置?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值