最近开发了一个VC程序,服务器端采用的是oracle 11g 的数据库,遇到了一些问题,希望csdn上有高手能给予解答
1.客户端程序A,接收网络上传输的数据,处理后 插入 数据库中的一张表,数据量有点大,大概1个小时1万多条数据。有的时候在这个 A 程序启动的时候,会遇到 ORA24550 的错误,google了很久这个错误,也没有找到解决办法。 但是 如果 A 程序启动后 几分钟 不出现这个 错误,那这个程序就能稳定的运行了。(最长是2天事件,实际测试的结果。)2.为了防止 客户端程序 意外被终止,导致程序没有 释放数据库连接语句,然后连接就一直存在的情况, 我生成一个 profile 文件,语句如下:
CREATE PROFILE "AA" LIMIT 
CPU_PER_SESSION DEFAULT 
CPU_PER_CALL DEFAULT 
CONNECT_TIME DEFAULT 
IDLE_TIME 10          
SESSIONS_PER_USER DEFAULT 
LOGICAL_READS_PER_SESSION DEFAULT 
LOGICAL_READS_PER_CALL DEFAULT 
PRIVATE_SGA DEFAULT 
COMPOSITE_LIMIT DEFAULT 
PASSWORD_LIFE_TIME DEFAULT 
PASSWORD_GRACE_TIME DEFAULT 
PASSWORD_REUSE_MAX DEFAULT 
PASSWORD_REUSE_TIME DEFAULT 
PASSWORD_LOCK_TIME DEFAULT 
FAILED_LOGIN_ATTEMPTS DEFAULT 
PASSWORD_VERIFY_FUNCTION DEFAULT 
然后将客户端登陆的用户  授予了这个 权限:  alter   user  rfid   profile   AA
profile里我设置了  IDLE_TIME 10. 是不是当我 客户端 10分钟内都没有操作数据库的话, 这个连接就会被 数据库自动释放掉了呢?

解决方案 »

  1.   

    参考:http://www.blogjava.net/pdw2009/archive/2008/10/17/234844.html
      

  2.   

    1
    ORA-24550: unhandled signal #number received. string
    Cause: Serious error: signal received
    Action: Refer to the platform-specific signal code, and see if the application code caused the error. Otherwise, record all error state and notify Oracle Support Services.
    应该是你应用程序的问题 和数据库没有关系
    参考一下
    http://forums.tangosol.com/forums/thread.jspa?threadID=964562
    2
    是的 下面是官方文档上的解释
    IDLE_TIME 
    Specify the permitted periods of continuous inactive time during a session, expressed in minutes. Long-running queries and other operations are not subject to this limit.
      

  3.   

    谢谢 王海
    现在有新的问题:
    我设置了 IDLE_TIME 后
    客户端10分钟没后数据库操作,连接就断开了
    但是 10分钟后,再次操作数据库就会弹出消息框报错。
    但是我程序里每次执行 sql 语句的时候都会有如下的判断:
    if(!m_Db.IsOpen())
    {
        m_Db.OpenEx(_T("DSN=rfid_server;UID=rfid;PWD=123") ,CDatabase::noOdbcDialog);
    }这样应该就能重新连接了吧,为什么还是会报错呢?
      

  4.   

    消息框的 提示消息是 : SQL Error: ORA-02396: 超出最大空闲时间, 请重新连接
      

  5.   

    呵呵 你怎么知道我叫王海从错误信息看已经很明白了 
    SQL Error: ORA-02396: 超出最大空闲时间, 请重新连接
    至于你说的
    if(!m_Db.IsOpen()) 

        m_Db.OpenEx(_T("DSN=rfid_server;UID=rfid;PWD=123") ,CDatabase::noOdbcDialog); 

    这一段程序为什么没有起作用
    你可以在程序运行的过程中下个断点
    调试一下看看有没有执行到这一步
      

  6.   

    知道你名字是 因为 我设置了  回复通知,通知里就是 王海回复的你的帖子。。ora 02396 这个问题解决了。但是 ora 24550 这个问题还是没有找到原因 非常悲剧。