日期:2014-05-17  浏览次数:20912 次

求助:proc使用连接池、多线程造成连接会话异常
本帖最后由 share2 于 2010-09-19 14:59:17 编辑
大家好!
程序功能是跟另外一台机器采用socket通信,读取消息解析之后起一个线程进行数据库操作,之后在线程中返回消息。

其中数据库操作的代码使用proc编写,编译的时候加的proc参数为:
proc db_fun.pc THREADS=YES CPOOL=YES CMAX=5 CMIN=1 CINCR=2


/***************
 * db_fun.pc
 ***************/
EXEC SQL INCLUDE SQLCA;
EXEC SQL DECLARE db_name DATABASE;
char lz_UserName[STRING_SIZE_30] = "";
char lz_Password[STRING_SIZE_30] = "";
char lz_DbString[STRING_SIZE_30] = "";

int select_info(STRU_MSG *asp_recv_msg,STRU_MSG *asp_send_msg)
{
    sql_context sql_ctx;
    EXEC SQL CONTEXT ALLOCATE :sql_ctx;
    EXEC SQL CONTEXT USE :sql_ctx;

    EXEC SQL CONNECT :lz_UserName IDENTIFIED BY :lz_Password  AT db_name USING :lz_DbString;

    char l_name[30];
    EXEC SQL AT db_name select t_name into :l_name from t_emp;
    ……

    EXEC SQL AT db_name COMMIT WORK RELEASE;
    EXEC SQL CONTEXT FREE :sql_ctx;
}


在db_fun.pc每个函数中都写连接、释放。

测试时发现每次接收到一个消息就会通过线程新建一个dedicated connections跟session并且始终不释放直到主进程终止。本来限制连接数的proc(Pro*C/C++: Release 9.2.0.1.0)预编译参数CMAX=5没有起作用。数据库中的inactive的session也一直增多。
请问代码是哪儿的问题?

------解决方案--------------------
这个问题不是太懂,不好意思帮不上忙,参考下这个文档,会不会有你想要的结果
http://wenku.baidu.com/view/e3f0114bcf84b9d528ea7aed.html
------解决方案--------------------
waiting.........