線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1810
推到 Plurk!
推到 Facebook!

異質資料庫的大量資料import

尚未結案
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-04 16:40:44 IP:61.218.xxx.xxx 未訂閱
請問我在Oracle有一個200百多萬筆資料要insert到Ms Sql要如何增快速度?? 我有幾各觀念疑問?? 1.我看了李維本書,書中提到,每次在抓取資料時,最好把recordpack=100,每次只抓取100筆資料,但是要抓第101筆時是要user去瀏覽資料才能往下取下100筆資料,但是我的是bath作業,要如何能自動抓下一個封包資料??? 2.當在insert資料時,往往都會寫成 for i:=0 to clientdataset.recordcount-1 但是一但寫了 clientdataset.recordcount不是又代表一次把200百多萬筆資料又一次抓完,就算設定recordpack=100也失效,但是若不這樣寫,又如何得知資料的筆數呢??
arvinhsu
一般會員


發表:0
回覆:10
積分:7
註冊:2003-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-04 16:57:30 IP:211.76.xxx.xxx 未訂閱
由於資料太多,進議你利用SQL 匯入資料的功能來做,這樣會比較快。
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-04 23:49:32 IP:211.74.xxx.xxx 未訂閱
為何不用batchmove元件來作呢?  一定比你用一比一筆丟快 永遠追不上技術更新的速度~~< src="http://140.134.4.20/~g8905202/pucca.gif">
------
星期一,二...無窮迴圈@@
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-06 12:24:17 IP:211.76.xxx.xxx 未訂閱
Hi, 請問你是要問利用程式的作法還是只是做一次資料的匯入呢? 若只是做一次的話, 可以參考 arvinhsu 兄的做法, 在 MSSQL 中有 DTS 可以用, 很方便也很快速, 若是要在程式中作業的話, 異質資料庫的資料傳送可以使用 pgdennis兄建議的 BatchMove 元件來進行會比較理想. 先說明你的用途, 再看用何種方式來實作!!
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-10 08:16:08 IP:61.218.xxx.xxx 未訂閱
1.我知道DTS可以做到還很快1小時就可以把2百多萬筆資料轉完, 2.至於Bathmove是用BDE連接,在李維的書中提到,dbexpress連接資料庫會比較快 所以我就沒使用bathmove,改用dbexpress測試 3.是把Oracle --> Ms sql 4.我是想試試看,用Delphi如何能寫出像DTS轉資料那麼快的速度,我想探討如何能利用Dbexpress寫出像DTS能做到的速度,其中一定有很多原理我們疏忽.... 5.pgdennis所說到的用Bathmove到底要如何做,才能讓資料不是一筆一筆insert 6.我目前有一個想法,只要不要上資料進transaction log速度會提昇很多, 不過還不知道如何寫
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-10 10:57:45 IP:218.163.xxx.xxx 未訂閱
引言: 1.我知道DTS可以做到還很快1小時就可以把2百多萬筆資料轉完, 2.至於Bathmove是用BDE連接,在李維的書中提到,dbexpress連接資料庫會比較快 所以我就沒使用bathmove,改用dbexpress測試 3.是把Oracle --> Ms sql 4.我是想試試看,用Delphi如何能寫出像DTS轉資料那麼快的速度,我想探討如何能利用Dbexpress寫出像DTS能做到的速度,其中一定有很多原理我們疏忽.... 5.pgdennis所說到的用Bathmove到底要如何做,才能讓資料不是一筆一筆insert 6.我目前有一個想法,只要不要上資料進transaction log速度會提昇很多, 不過還不知道如何寫
4.不是疏忽,那些原理是機密,batchmove元件也是呼叫DbiBatchMove api,想要知到原理,只能進入DbiBatchMove觀察,不過到是有機可循啦,個人猜測,像oracle有sql loader可以大量import資料,而oralce 提供的oci interface可以呼叫之,我猜DbiBatchMove 該不會是直接跟OCI打交道,簡單的說,應該是資料庫系統如果有開放資料import的介面,應該就可以用程式呼叫,至於資料庫端是如何做的,這就是各家廠商的機密啦... > 永遠追不上技術更新的速度~~< src="http://140.134.4.20/~g8905202/pucca.gif">
------
星期一,二...無窮迴圈@@
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-10 11:22:03 IP:210.241.xxx.xxx 未訂閱
個人經驗,如果只有2百多萬筆資料應該不用那麼久.. 你可以用兩各Query來做,Query1: SELECT * FROM ORACLE, Query1.First; While not Query1.Eof do begin //這裡用另外一各Query下insert語法寫進MSSQL Query1.next; end; TRY TRY SEE
引言: 1.我知道DTS可以做到還很快1小時就可以把2百多萬筆資料轉完,
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-10 12:32:12 IP:61.218.xxx.xxx 未訂閱
真的就是這麼久,我有60幾各欄位,若使用你的方法更久
vip88
一般會員


發表:8
回覆:23
積分:6
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-19 13:27:46 IP:61.221.xxx.xxx 未訂閱
最快速的做法: 1.使用Oracle內建的工具exp.exe轉成純文字檔。 2.使用MSSQL的BCP.exe搭配定義的格式檔轉入。 以上的方法,可以在很短的時間完成千萬筆的資料轉換。 Good Luck! 歡迎光臨神奇力量網 http://www.688.idv.tw/
------
歡迎光臨神奇力量網

http://mpn.adsldns.org/
系統時間:2024-09-09 7:11:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!