Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573794
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 18:13:15

2 关键过程:根本原因分析
从日志发现,
"2006-06-20 10:49:24, 现在队列里无任何消息,休息1秒钟。
m_MsgId=67633186
recieve message:象^PREC534TyczChargeFee                   20060620104924169       1;
ORA-01722: invalid number
ORA-06512: at "NMDATA.AP_WRITE_BUSINESS_RECORD", line 9
ORA-06512: at line 1"
BOSS网管从消息队列中采集到的数据前面包含乱字符,但是采集营业受理记录却没有问题,营业和接口写消息队列调用的程序是一样的,经过查询发现:
char msg[100] = {0};
sprintf(msg,"%-3s%-3s%-32s%-14s%-10ld%d;",subsys,region,opcode,starttime,duration,success);
strcat(sendbuf,msg);
程序中的msg组织的没有问题,可能是sendbuf导致的,经过进一步查询发现:
class CMsgCommProc
{
private:
    int duration;            //业务调用占用时间
    int nmtraceflag;         //单次调用是否打印网管相关信息
    int nmflag;              //是否激活网管功能
    char nmkeyfile[100];
    int msgcnt;
    char sendbuf[100];
   
    ......
};
CMsgCommProc::CMsgCommProc()
{
    duration = 0;
    nmtraceflag = 0;
    nmflag = 0;
    strcpy(nmkeyfile, "/tux80/apps/DataCollect.KEY");
    msgcnt = 0;
}
该类对象构造函数中没有对该变量进行初始化。
3 结论:解决方案及效果
在该类对象构造函数增加对该成员的初始化
CMsgCommProc::CMsgCommProc()
{
    duration = 0;
    nmtraceflag = 0;
    nmflag = 0;
    strcpy(nmkeyfile, "/tux80/apps/DataCollect.KEY");
    msgcnt = 0;
    memset(sendbuf, 0, sizeof(sendbuf));
}
程序重新编译,问题得到解决。
阅读(393) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~