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));
}
程序重新编译,问题得到解决。
阅读(385) | 评论(0) | 转发(0) |