免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3150 | 回复: 4
打印 上一主题 下一主题

Linux下OCI接口的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-06 21:52 |只看该作者 |倒序浏览
我正在写一个linux 下利用OCI接口的Oracle数据库连接池的程序。
我想定时检测连接池中建立的连接是否可用,请问使用什么方法?
注:连接池类中有成员变量
                OCIEnv *envhp_m;        /*!< 环境句柄*/
                        OCIServer *srvhp_m;     /*!< 服务器句柄*/
                        OCISvcCtx *svchp_m;     /*!< 服务上下文句柄*/
                        OCIError *errhp_m;      /*!< 错误信息句柄*/
在不同的连接会话类里面有不同的成员变量OCISession *authp_m;  /*!< 会话句柄 */
每个连接会话类共享连接池类中的变量。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
2 [报告]
发表于 2011-10-08 16:17 |只看该作者
本帖最后由 yulihua49 于 2011-10-08 16:32 编辑
我正在写一个linux 下利用OCI接口的Oracle数据库连接池的程序。
我想定时检测连接池中建立的连接是否可用, ...
tianqiang2516 发表于 2011-10-06 21:52


我是这么做的:
连接池初始化时,并不打开连接。池的每一个成员都有一个状态,初值=-1,无连接。
客户取连接时,发现无连接,就发起连接。如果成功,状态改0,并返回句柄,不过这是个应用句柄。包括数据库的各种句柄,和状态。
如果连接失败,状态依然是-1,并告诉客户,连接失败,稍后再来。

客户操作过程,如果发生错误,是连接失效,则状态置-1,归还连接。归还连接函数,发现-1,
立即关闭这个失效的连接。资源是正常返回池里。
还有一个定时的线程,专门检查连接池的健康。发现一个连接空闲了超过一定时间(5分钟)将自动关闭这个连接。
这样,检查连接是否有效的操作就不需要了。

当然在数据库故障时,客户可能夭折一个交易。不过不要紧,当数据库恢复时,连接池自愈。

这个逻辑使连接池的健康管理大大简化了。已经开发了许多可靠的应用系统。

论坛徽章:
0
3 [报告]
发表于 2011-10-20 19:21 |只看该作者
回复 4# yulihua49


谢谢你的回答~
   
连接超时关闭是个不错的方法,可是定时器怎么实现呢?有现成的工具吗?

另外我的想法是用一个专门的线程检测各个已用连接,怎么样检测才算是连接活跃?怎么样检测才算是连接失效呢?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2011-10-21 12:47 |只看该作者
本帖最后由 yulihua49 于 2011-10-21 12:49 编辑
回复  yulihua49


谢谢你的回答~
   
连接超时关闭是个不错的方法,可是定时器怎么实现呢?有现成的 ...
tianqiang2516 发表于 2011-10-20 19:21



    证明连接有效,是个复杂问题,所以才有了我那个逻辑来回避这个问题。

现在在高可用性领域有两个复杂问题。一个是这个。另一个是在HA系统里如何证明活动的主机没有死亡(如果它死亡了,就会有别人来接管它)。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2011-10-22 17:49 |只看该作者
建议楼主在C++区再问问。我不会C++
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP