EXEC SQL BEGIN DECLARE SECTION;
char sConnStr[100] = "";
int iSql = 0;
EXEC SQL END DECLARE SECTION; EXEC SQL WHENEVER SQLERROR goto errexit; EXEC SQL CONTEXT USE : ctx;
strcpy(sConnStr, sConnectString); EXEC SQL connect : sConnStr;
iSql = sqlca.sqlcode;
return 0;
errexit:
if (sqlca.sqlcode < 0)
sprintf(ErrMsg, "\n%.*s\n\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
return sqlca.sqlcode;问题rt,上面是连接登陆数据库的代码,但是现在碰到的问题是这种方式登陆数据库之后,如果有一段时间不操作数据库,
空闲一段时间后再操作会报错:ORA-03114: 未连接到 ORALCE;
怀疑是空闲一段时间后被防火墙给断掉了,有没有办法让他不用还一直保持着连接,有没有类似于心跳一样的东西?

解决方案 »

  1.   

    跟你的程序无关,应该跟使用的用户的profile的idle_time有关。
    参考下段:五、如何创建一个PROFILE:
           1、命令:
              CREATE PROFILE 名称
              LIMIT
              SESSION_PER_USER 2
              CPU_PER_SESSION 1000
              IDLE_TIME 60     用户在数据库终止前,可以让连接空闲多长时间(分钟)
              CONNECT_TIME 480
           
    六、限制参数:
           0、UNLIMITED 取消资源限制
              DEFAULT      缺剩资源限制,即使用default资源限制       1、CONNECT_TIME        :一个连接会话的最长连接时间(分钟)
                                 当用户会话时间超过CONNECT_TIME指定的时间,Oracle将回滚当前事务,并且结束他的会话
              IDLE_TIME           :一个连接会话的最长连接时间
                                 当用户空闲时间超过IDLE_TIME指定的时间,Oracle将回滚当前事务,并且结束他的会话       2、SESSIONS_PER_USER:一个用户允许同时(并发)会话的总数,超过后系统禁止该用户的后续会话,并返回错误:
                                 ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit
           3、SESSION级LIMITE:
              CPU_PER_SESSION:定义了一个SESSION占用的CPU的时间(1/100 秒),当达到这个限制用户不能在此会话中执行任何操作,
                               此时必须先断开连接,再连接才行。
              CPU_PER_CALL      :限制每次调用SQL语句期间(parse、execute、fetch)可用的CPU时间总量,单位是百分之一秒。达到限制时
                               语句以报错结束。不同于CPU_PER_SESSION的是,没达到CPU_PER_SESSION限制,还可以进行新的查询。
        
           4、LOGICAL_READS_PER_SESSION: 一个会话允许读写的逻辑块的数量限制
        
           5、CALL级LIMITE
              CPU_PER_CALL:每个语句占用的CPU时间
              LOGICAL_READS_PER_CALL:一次调用的SQL期间,允许读数据库块数限制
           6、PRIVATE_SGA:一个会话允许分配的最大SGA大小,使用K/M定义
              COMPOSITE_LIMIT:一个会话的资源成本限制,CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, and PRIVATE_SGA