- 16
- 0
- 约4.22千字
- 约 5页
- 2017-01-19 发布于北京
- 举报
C++异常规格与程序core
日期:2010-1-25
作者:李建生
题记:追踪调试问题,上穷碧落下黄泉的感觉。
平台:IBM AIX、VAC(Visual Age C++)、Oracle 10g
关键词:异常、异常规格、core、OCI、非法日期、
摘要:我们的程序查询数据库时,如果遇到非法数据,则一定会core,对于正式上线运行程序,尤其是关键业务(如充值),会造成致命问题。
无论是我们的独立程序、还是CICS中件间程序,在查询oracle数据库时,若是遇到非法日期格式的数据,都会core掉,给我们的工作带来困扰,增加了开发维护工作量。
问题根源是华为的oralce数据库接口表中,对于日期类型的数据,偶尔会有一些日期字段是非法的,不合常规的如:22-24。从兴华为联合体刚割接BOSS时,遇到了大批这样的数据,开发浪费了大量的人力追踪、定位问题,最后统一提给华为修改数据了事。
但是到现在为止虽然没有大量的非法数据出现,但是偶尔还是会有非法数据,使我们的程序出错。如前段时间帐务空中充值程序问题,遇到了非法日期数据,程序一直Core,很短时间内产生了5万左右个文件,给维护带来的很大的工作量。并且还有可能导致充值不成功,引起客户投诉。
我们访问oralce数据库采用的是xdbc,而xdbc是采用oracle的OCI接口实现数据访问的。之前我们无法在测试数据库中生成非法日期数据,导致无法重现测试。后来,也就没有再跟进这个问题了。
今天有压力了(原因不说了),一劳永逸的解决掉这个问题(临时解决方法是不再访问数据库中的日期字段)。先说明一下我们访问数据库的代码结构:
数据访问类DAO(由工具根据建表语句自动生成)直接使用xdbc访问数据库。应用程序可以通过DAO或xdbc来访问数据库。
首先,模拟正式环境运行出错的场景,生成非法日期的数据。Xdbc无法完成这项任务,因为传递给它的一这理是日期对象,而合法的日期才能产生日期对象。再考虑Sqlplus,也不行,只能输入合法的日期。没办法,只有通过写小程序了。接着考虑oracle提供了OCI的接口,检查文档看OCI接口是否支持插入非法数据。
参看红色部分,通过OCI接口调用,OCI不会检查日期的范围,也即是不对合法性进行检查。证明可以通过OCI接口插入非法日期数据。以前不怎么了解OCI,google一把吧。好麻烦啊,现在只能中午上网。中午上网搜了一把,发现有一个参考示例,自己再接合xdbc通过OCE访问数据的方法。写出了插入非法数据的代码:
//将要插入的非法日期
char p_bvi[7]=22-33;
//生成访问OCI的环境
rc = OCIEnvCreate((OCIEnv **) p_env,OCI_DEFAULT,(dvoid *)0,
(dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t))0,
(void (*)(dvoid *, dvoid *)) 0,
(size_t) 0, (dvoid **) 0);
//登录数据库,使用201的测试机
rc = OCILogon(p_env, p_err, p_svc, jmzw, 4, jmzw, 4, boss15test, 10);
//创建库表create table test_a(a date);
//准备插入SQL语句
strcpy(mysql,insert into test_a values(:x));
rc = OCIStmtPrepare(p_sql, p_err, mysql,
(ub4) strlen(mysql), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
//绑定非法数据字段
rc = OCIBindByName(p_sql, p_bnd, p_err, (text *) :x,
-1, (dvoid *) p_bvi, sizeof(p_bvi), SQLT_DAT, (dvoid *) 0,
(ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT);
rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1, (ub4) 0,
//执行插入操作
(CONST OCISnapshot *) NULL, (OCISnapshot
您可能关注的文档
- 2012-2013学年NEO街舞社述职材料).ppt
- 2012湖北省高考随州广水一中预测卷答案).doc
- 2012年度共性目标管理工作总结).doc
- 2012年共青团长春市委工作安排).doc
- 2012全自动压载水系统word).doc
- 2012智能开关插座项目招商).ppt
- 2013春集中业务学习内容).doc
- 2013年公需科目考试题).doc
- 2013年小企业会计准则).doc
- 2013中考语文模拟试题四).doc
- 腾讯安全沙龙:红队视角下的海外SRC猎场:战略、战术与突破.pdf
- 【icap】ETS的范围扩展:设计和政策挑战.docx
- bcg -美国最高法院关于关税的裁决对你的企业意味着什么 What Does the US Supreme Court Ruling on Tariffs Mean for Your Business.pdf
- 2026届甘肃兰州市高三下学期第一次模拟考试历史试卷(扫描版,含答案).docx
- bcg -零售银行如何让人工智能代理发挥作用 How Retail Banks Can Put AI Agents to Work.pdf
- 住宅项目规范解读(GB 55038-2025) -培训 - 房地产-2025.docx
- 盘扣式脚手架工程量自动计算表 -培训 -房地产-2025.pdf
- 广东省汕头市2024-2025学年高三下学期第一次模拟考试英语学试题(含答案).docx
- 品牌研究+_+2025+CAPSE中国航司品牌榜单.pdf
- 【银河专题】如何看待豆粕内外价差关系.pdf
最近下载
- 《四川省建筑与市政工程岩土工程勘察常见疑难问题解析》(2025版).pdf
- 基于多源数据融合的在线自助旅游平台的设计与实现.doc VIP
- SUEZ苏伊士 ZeeWeed1500-x 超滤膜操作手册.pdf
- 化学海洋学精品课件-海水中二氧化碳体系各分量的计算.ppt VIP
- 党课讲稿:学习传承雷锋精神,践行宣传使命.docx VIP
- 化学海洋学精品课件-海水二氧化碳分压.ppt VIP
- 《积极分子转发展对象ppt答辩》.ppt VIP
- 化学海洋学精品课件-海洋中磷的生物地球化学循环.ppt VIP
- 再一次看梵高梵高的基本介绍.pptx VIP
- 2025年信息系统安全专家容器与微服务安全专题试卷及解析.pdf VIP
原创力文档

文档评论(0)