- 論壇徽章:
- 0
|
求助
大約fork到760個進(jìn)程的時候,數(shù)據(jù)庫就拒絕連接了
程序基本上就是主程序fork一個子進(jìn)程,然后子進(jìn)程操作數(shù)據(jù)庫后退出
-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);
/*創(chuàng)建新的連接 */
if(fork()==0)
{ /*子進(jìn)程代碼 */
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語句的執(zhí)行順序不能更改 */
EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :context;
EXEC SQL CONTEXT USE :context;
EXEC SQL CONNECT :uid;
if(SQLCODE<0){
printf("創(chuàng)建數(shù)據(jù)庫連接失敗,%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc);
return -1;
}
insert_data( context );
EXEC SQL COMMIT WORK RELEASE;
if(SQLCODE<0){
printf("斷開數(shù)據(jù)庫連接失敗!%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; /* 指定執(zhí)行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("插入紀(jì)錄失敗!%d:%s\n",SQLCODE,sqlca.sqlerrm.sqlerrmc);
return -1;
}
}
} |
|