现有一老C/S系统,客户端用VB作的,采用Access的本地数据库,但数据在本地Access中处理完成后,最终需要将Access数据写入到Oracle中,其VB代码大致如下://打开本地数据
....
Set resLocal = RunSQLGetRS(CnnProjectDb, strSql)
//打开服务器数据   
....            
Set resServer = New ADODB.Recordset
resServer.Open strSql, gOraSession
 
//将数据更新至Oracle中   
     While Not resLocal.EOF
         resServer.AddNew
         ...        
         resLocal.MoveNext
     Wend
    
     resASMS.Update现因有部分用户在外地,连接Oracle服务器速度很慢,导致将数据写入需花费较长时间,请问有什么优化办法啊?请高手指点,感激不尽!!

解决方案 »

  1.   

    网络上延迟造成的,那就剥离网络层的问题,将access文件传到本地后再写oracle
      

  2.   

    网络原因,没有什么好想的,慢也得这样了,楼上的不太现实,如果直接传ACESS的话,能比ORACLE快??同样的网络环境
    除非建立自己的专线VPN。
      

  3.   

    网络上延迟造成的,那就剥离网络层的问题,将access文件传到本地后再写oracle
    ================================================================
    回复:是条思路,但有点疑问:
    1. 上传Access文件到Oracle服务器本身需要时间,如此操作对外地办事处上载速度能有多大提升未知,但总部的用户本来是不需要作该动作,如此修改后总部的用户多加了该动作,会影响总部用户的速度,毕竟总部用户最多,比较来说总部用户更重要些。
    2. Oracle服务器归后端系统所有(跨了大部门的),要让他们开放权限让我们去上载文件、再删除上载的文件,难度很大,估计方案不是被我们老大拍死,就是会被他们老大拍死。
      

  4.   

    我的想法是:
    一:你这样用AddNew方法本来就慢,还是用insert into select From要快,我就用过oracle 的DNS做连接,用SQL从Access连接中直接导入Oracle。不过反过来导入没试过。~!!
    二;“上传Access文件到Oracle服务器本身需要时间”。这个问题不要考虑太多,上传到服务器再导入,效率肯定比通过网络来得快,除非所处的网络本身就慢的不行。
      

  5.   

    我自己试了下面二种方式:
    1. 将Oracle表通过ODBC先链接到Access库中,然后采用:
       Insert into OraTable select * from AccessTab 的方式写入到Oracle中;
    2. 直接在Access中采用ODBC连接方式,脱离VB,
       INSERT INTO OraTab IN [odbc][odbc;driver=Microsoft ODBC for Oracle;Server=OraServer;uid=u;pwd=p] SELECT * FROM AccessTab
    但速度都还不如原来的方式。
    上网查了下,像用.Net的SqlBulkCopy能够将数据快速写入Sql数据库,请问下,有没有其它类似工具,可以将数据快速导入Oracle中啊?语言不限。
      

  6.   

    我的想法是: 
    一:你这样用AddNew方法本来就慢,还是用insert into select From要快,我就用过oracle 的DNS做连接,用SQL从Access连接中直接导入Oracle。不过反过来导入没试过。~!! 
    回jackly018:AddNew方法不慢,慢的是最后一步的resServer.Update ,直接Insert的方法我试过了,比原来的方式要慢1/3的样子。二;“上传Access文件到Oracle服务器本身需要时间”。这个问题不要考虑太多,上传到服务器再导入,效率肯定比通过网络来得快,除非所处的网络本身就慢的不行。
    回jackly018:现在慢的原因就是外地办事处连接总部的Oracle服务器慢造成的,网络连接我这种小喽喽是没办法提升的,只能从程序方面想办法,看能不能优化。谢谢!