在從sql導入oracle的工作中,大家的思維慣式都是首先采用sqlserver的dtswizard,實在是因為這個工具使用直觀、方便,而且在對非大表的操作中性能不錯,我也是這樣做的,但是在經過一系列的痛苦的操作后,我發現在使用的過程中還是有一些很重要的限制因素,很多人可能會遇到其中的一兩點,我這里僅把我遇到的記錄下來,以作參考。
一、先說常規的操作流程
1.選擇源數據類型,這里是sql,注意數據源,在次提醒,注意數據源,因為他讓我心痛
2.選擇目的的數據源,這里需要特別指出,就是開始的時候我選錯了數據源,讓我白做了一個星期的工作,或者說讓我開拓了不適用dtswizard導數據的思路,雖然很痛苦,但是很指得。廢話少說,注意要選擇“oracle Provideer for OLE DB”,注意這里還有一個“Microsoft OLEDB for Oracle”,我之前選擇的就是第二個,導致后面在執行導出操作的時候,很多奇怪的錯誤。一定要選對啊。
3.填寫對應的oracle 信息,注意數據源的地方使用transnames.ora中指定的名稱,允許保存密碼勾選
4.默認點下一步,進入表的映射處理,這里我們做表的字段的對應處理。
5.選中對應的表,點擊編輯按鈕,進入后“編輯sql”,可以手工調整字段的數據類型。
這里微軟做了一個不錯的事情,在sql中與一張對應表,里面存儲了sql的數據類型和其他類型數據庫如oracle sysbase db2等的對應字段匹配
SELECT * FROM msdb.dbo.MSdatatype_mappings 可以從這里找到對應的字段類型匹配。
6.下一步下一步,祈禱成功吧。
二、注意事項
1.dts對大表數據的支持不是很好。這里說的大表數據不能簡單從數據量上定義,有的表數據量很大,但是列很少,dts依然可以很正常執行。我這里試驗的標准是80萬條數據,幾十列,中間包含text字段,在執行的時候,效率低先不錯,執行好長時間后然后報錯很坑爹啊。而且數據沒導成功,表還給創建了,我得手動刪除表才能再次執行,如果一次導入幾十幾百張表,中間一錯誤很是郁悶啊。
解決的辦法是使用oracle的sql loader雖然麻煩點,但是效率極高,10000+/s以上的性能,還能挑剔啥。
2.個別表執行導入不成功,提示異常錯誤。暈,我知道異常錯誤是啥,只能用最傳統的辦法,導出數據,然后用toad導入,做好字段類型的設定,基本可以ok.
3.字段的設定:我這里如果超過varchar2(2000)就報錯,沒辦法對很多varchar(4000)的數據類型只能手工調整為nclob類型。
暫時想到這么多,以后有別的在補充吧。