我现在有一数据库连接池,用的是TADOConnection连接,原来连接的是sql。现在使用oracle10数据库,我就下来最新的oracle10最新的客户端,使用的oracle的驱动,设置好ConnectionString,但是程序测试下来,有内存泄露!使用软件检测还测不出来哪里有泄漏,但是更换sql的ConnectionString,就没问题。
折腾了好长时间,没测出来。后来我偶然使用了微软的oracle驱动,当然还要装oracle的客户端,但是必须设置个配置文件。测试后居然内存不涨了!!!
这我就奇怪了,什么都没改,微软的驱动不也是调用配置文件里面的链接,还是使用oracle的链接,没啥就没泄露了???这是怎么一会事情???我使用单独的测试程序exe链接oracle,直接模拟select结果,使用oracle的驱动,不使用微软的oracle驱动,但也不涨。我就更加郁闷了向项目经理说明了情况,结果项目经理要求必须使用oracle的驱动,这个用户不必配置那个配置文件(我估计客户不会配置的,会引起很多不要的麻烦)!我的头已经N个大了,大哥大姐门给个解决方法了,不行的话,我真要跳楼了:(

解决方案 »

  1.   

    使用oracle驱动必须安装oracle客户端,也有一些人通过一些方式绕过不安装客户端的,但是效果也不是很理想,oracle客户端的配置很简单。包括创建监听配置网络服务你都可以写程序来实现。
      

  2.   

    用ODAC组件来连接oracle数据库,试试
      

  3.   

    ORACLE做成三层可能好点,客户端在中间层装,不然客户端要逐个装客户端比较麻烦。
      

  4.   

    不然客户端要逐个装客户端比较麻烦。 -> 不然要逐个用户装ORACLE客户端比较麻烦。
      

  5.   

    我这个就是服务器端,客户请求过来,我通过oracle查询数据,然后返回。现在就是这个服务器内存在不停地涨啊!
    但是要是链接串修改成微软那个oracle的,就不涨,sql的也不长。
      

  6.   

    那你的问题是什么?不想安装oracle客户端?还是建议你安装
      

  7.   

    呵呵,客户端肯定是要安装的,但是要使用oracle的串。如,我现在用的是:
    connectionString:='Provider=OraOLEDB.Oracle.1;User ID=ECM;Password=ecm;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.17.31)(PORT=1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)));Persist Security Info=False';
    这时就内存泄露如果,我改用这个连接串,就不泄露。这个事微软的oracle,但是需要在客户端程序配置个配置文件,配置文件的内容,就是上面连接的内容,
    connectionString:=Provider=MSDAORA.1;Password=test;User ID=test;Data Source=orcl;Persist Security Info=True我的问题是,要用第一种连接方式,但是要解决内存泄露的问题。这两种连接不同的就是连接字符串不同,别的代码我都没动
      

  8.   

    我一直用odac联接oracle数据库,很方便的,为什么不改这用这个呢
      

  9.   

    就是配置tnsnames.ora呗,这个有什么复杂的,你写一段配置的代码不就行了么
      

  10.   

    我这个数据库连接池是通用的,sql,oracle,现在就是不想设置这个配置。
    使用oracle的驱动,请问就一定有内存泄露?我就是想知道泄露在什么地方,是否可以解决,不能用别的方式
      

  11.   

    oracle的驱动应该没有问题吧,微软的可能支持不够好。
      

  12.   

    楼上的,正好说反了。我这个程序里面,恰恰是如果使用微软的oracle就没泄露,使用oracle提供的就泄露
      

  13.   

    关注 很诧异的问题只能说ADO对Oracle的驱动支持不够好,和MS自己的驱动配合好点
      

  14.   

    下载个ODAC1020221.exe试试,我用这个没有发现内存泄露,不过没有使用连接池。驱动就是Oracle Provider for OLE DB。如果不明白怎么安装,我可以给你说明文档。要的话,留下你的EMAIL
      

  15.   

    告诉你,用ODAC控件,连客户端都不用安装
      

  16.   

    ODAC有些命令用ADOQuery执行不了,比如多条语句同时执行!兼容性稍差一点点,方便当然还是它了。另外我经过几天的调试终于找到问题了,但是具体为什么还不清楚!把我找到的问题和大家分享一下吧:
    我的ADOQuery获取字段信息的时候,都是使用ID= VarToStr(ADOQuery.FieldsValue['字段名']);
    结果我改成:
    ID:=trim(ADOQuery.FieldByName('字段名').AsString);
    就可以了!但是上面的情况,我用微软的那个oracle的驱动也没问题的,有清楚为什么的兄弟姐妹们,回复下。大家共同提高