- 论坛徽章:
- 0
|
求助
大约fork到760个进程的时候,数据库就拒绝连接了
程序基本上就是主程序fork一个子进程,然后子进程操作数据库后退出
-12549:ORA-12549: TNS perating system resource quota exceeded
这是我的代码
#include <sys/time.h>
#include <sys/select.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <netinet/in.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE oraca;
EXEC ORACLE OPTION (ORACA=YES);
EXEC ORACLE OPTION (RELEASE_CURSOR=YES);
#define SQLCODE sqlca.sqlcode
int main(void)
{
int conFlag=10000;
int t;
while(conFlag>0)
{
conFlag--;
usleep(1000*100);
//sleep(1);
/*创建新的连接 */
if(fork()==0)
{ /*子进程代码 */
printf("sleep ok[%d]\n",conFlag);
printf("process start[%d]\n",conFlag);
startProcess();
printf("process quit[%d]\n",conFlag);
exit(0);
}
else
{
}
}
exit(0);
}
int startProcess()
{
sql_context context;
struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */
char uid[] = "maps/maps";
/* 以下SQL语句的执行顺序不能更改 */
EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :context;
EXEC SQL CONTEXT USE :context;
EXEC SQL CONNECT :uid;
if(SQLCODE<0){
printf("创建数据库连接失败,%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc);
return -1;
}
insert_data( context );
EXEC SQL COMMIT WORK RELEASE;
if(SQLCODE<0){
printf("断开数据库连接失败!%d:%s\n",SQLCODE,sqlca.sqlerrm.sqlerrmc );
return -1;
}
EXEC SQL CONTEXT FREE :context;
return 0;
}
int insert_data( context )
{
struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */
int i;
int msg_seq;
EXEC SQL CONTEXT USE :context; /* 指定执行SQL语句的上下文 */
for(i=0; i<2; i++ ){
EXEC SQL select SMP_ID_SEQ.NEXTVAL into :msg_seq from DUAL;
if(sqlca.sqlcode!=0)
{
printf("取序列号失败!%d\n",sqlca.sqlcode);
return -1;
}
EXEC SQL insert into smp_msg_store values(:msg_seq,1,1,:i);
if(SQLCODE!=0){
printf("插入纪录失败!%d:%s\n",SQLCODE,sqlca.sqlerrm.sqlerrmc);
return -1;
}
}
} |
|