请教一个关于oracle使用内存的问题   在RH9下,我用Libsqlora8库函数对数据库进行操作访问。
   系统目的:实现对文件服务器的所有操作都记录进数据库中。
   系统实现流程是:
   1)初始化时,链接数据库,全局变量DBH=connectdb();
   2)系统分线程对访问文件服务器的操作进行记录;
   3)形成SQL语句query,利用do_insert(DBH, query)函数插入数据库中。    系统在运行过程中,oracle占用的内存越来越大,不知道什么原因。是内存泄漏吗?是调用方式不对吗?希望有高手能给予指导。内存使用情况如下:
  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
 7506 oracle    15   0  345M 345M  343M S     0.9 17.1   7:32   0 oracle
 
附connectdb()和do_insert()的代码
sqlo_db_handle_t connectdb()
{
    const char * cstr = _defuser;
   sqlo_db_handle_t dbh;
    int handle;    /* handle of the interrupt handler */   /* init */
   if (SQLO_SUCCESS != sqlo_init(SQLO_OFF, 1, 100)) 
   {
   DEBUG_MSG(5, g_errlog_fp, "Failed to init libsqlora8");    
     return -1;
   }   /* register the interrupt handler */
   sqlo_register_int_handler(&handle, sigint_handler);   /* login & connect*/
   if(SQLO_SUCCESS != sqlo_connect(&dbh, cstr)) 
   {
   DEBUG_MSG(5, g_errlog_fp, "Cannot login with %s\n", cstr);    
     return -1;
   }
   return dbh;
}int do_insert(int dbh, char *query)
{
    if (SQLO_SUCCESS > sqlo_exec(dbh, query)) 
    { 
     DEBUG_MSG(5, g_errlog_fp, "insert query failed: %s \n", sqlo_geterror(dbh));  
        return 0; 
    }  
  
    if (SQLO_SUCCESS != ( sqlo_commit(dbh))) 
    {
     DEBUG_MSG(5, g_errlog_fp, "commit failed : %s\n", sqlo_geterror(dbh));         
       return 0;
    }    return 1;
}

解决方案 »

  1.   

    我认为是Oracle的会话如果没有结束就会一直涨内存
      

  2.   

    是不是可以先看看文件服务器的操作频繁度,看看这个纪录操作日志的动作是不是频繁到一次连接Oracle的会话一直没有结束状态
      

  3.   

    这个,insert的时候分批提交会不会有效果?
      

  4.   

    的确,操作文件服务器非常频繁,记录的日志非常多。每次写数据库都是调用do_insert(DBH, query)。只有当程序退出时,系统才会关闭对ora的链接。
      

  5.   

    的确,操作文件服务器非常频繁,记录的日志非常多。每次写数据库都是调用do_insert(DBH, query)。只有当程序退出时,系统才会关闭对ora的链接。