现有一老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服务器速度很慢,导致将数据写入需花费较长时间,请问有什么优化办法啊?请高手指点,感激不尽!!
....
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服务器速度很慢,导致将数据写入需花费较长时间,请问有什么优化办法啊?请高手指点,感激不尽!!
除非建立自己的专线VPN。
================================================================
回复:是条思路,但有点疑问:
1. 上传Access文件到Oracle服务器本身需要时间,如此操作对外地办事处上载速度能有多大提升未知,但总部的用户本来是不需要作该动作,如此修改后总部的用户多加了该动作,会影响总部用户的速度,毕竟总部用户最多,比较来说总部用户更重要些。
2. Oracle服务器归后端系统所有(跨了大部门的),要让他们开放权限让我们去上载文件、再删除上载的文件,难度很大,估计方案不是被我们老大拍死,就是会被他们老大拍死。
一:你这样用AddNew方法本来就慢,还是用insert into select From要快,我就用过oracle 的DNS做连接,用SQL从Access连接中直接导入Oracle。不过反过来导入没试过。~!!
二;“上传Access文件到Oracle服务器本身需要时间”。这个问题不要考虑太多,上传到服务器再导入,效率肯定比通过网络来得快,除非所处的网络本身就慢的不行。
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中啊?语言不限。
一:你这样用AddNew方法本来就慢,还是用insert into select From要快,我就用过oracle 的DNS做连接,用SQL从Access连接中直接导入Oracle。不过反过来导入没试过。~!!
回jackly018:AddNew方法不慢,慢的是最后一步的resServer.Update ,直接Insert的方法我试过了,比原来的方式要慢1/3的样子。二;“上传Access文件到Oracle服务器本身需要时间”。这个问题不要考虑太多,上传到服务器再导入,效率肯定比通过网络来得快,除非所处的网络本身就慢的不行。
回jackly018:现在慢的原因就是外地办事处连接总部的Oracle服务器慢造成的,网络连接我这种小喽喽是没办法提升的,只能从程序方面想办法,看能不能优化。谢谢!