我們偶爾會有將數據從SQL SERVER導入到ORACLE當中的這種需求,那么這種跨數據庫導數有那些方法呢?這些方法又有那些利弊呢? 下面比較膚淺的總結了一些可行的方法。
1:生成SQL腳本然后去ORACLE數據庫執行。
CREATE TABLE TEST
(
ID INT ,
NAME VARCHAR(12)
)
INSERT INTO dbo.TEST
SELECT 1001, 'Kerry' UNION ALL
SELECT 1002, 'Jimmy' UNION ALL
SELECT 1003, 'Ken' UNION ALL
SELECT 1004, 'Richard'
SELECT 'INSERT INTO TEST '
+'SELECT ' + CAST(ID AS VARCHAR(12)) +' AS ID,'''
+ NAME + ''' FROM DUAL;'
FROM dbo.TEST
優點:我還真找不出其優點,僅僅作為一種方法歸納在此。
缺點:操作麻煩,每次操作都要寫腳本;數據量大時性能非常糟糕。
適用場景:僅僅使用小表、基礎數據表。例如省份表之類。它能做到的,SQL SERVER導入導出工具能比其跟方便、快捷的做到。
2:創建鏈接服務器鏈接到ORACLE數據庫
創建鏈接到ORACLE數據庫的鏈接服務器非常簡單,在此不做過多描述。一般使用這種方式做數據交互的情況較多。
優點:鏈接服務器創建好后,可以非常方便的使用SQL導入數據到ORACLE。而且可以反復使用。
缺點:需要安裝ORACLE CLIENT客戶端,而且ORACLE CLIENT客戶端工具安裝后必須重啟服務器使之生效。效率不是最快的。尤其當導入的數據量非常大時,不推薦使用這種方法。
適用場景:適用於系統經常需要在SQL SERVER與ORACLE之間數據交互的場景,這樣就可以方便的利用它來導數,而不用為了導數在服務器上裝ORACLE CLIENT客戶端工具。尤其適合經常需要數據交互的場景。
3:使用SQL SERVER的導入導出工具
SQL Server的導入導出工具(SQL Server Import and Export Data),可以在很多不同數據庫之間進行導數。
優點:圖形化操作、快捷方便。不需要寫代碼(或只需要寫很少代碼)。
缺點:1:效率不高問題,有一次導入70多萬數據,耗時非常久。速度非常慢。當然我沒有大量測試驗證。不知道不同的數據庫連接驅動Microsoft OLE DB Provider for Oracle 、Oracle Provide for OLE DB、.Net Framework Data Provider for Oracle之間的效率是否有較大區別。
2:出錯時提示信息有時候不明確(出錯信息不具體),用戶體驗非常糟糕。
適用場景:適用於絕大多數數據量不大的場景。尤其適合一次性導數。
4:借助BCP和SQL*LOADER導入數據
通過BCP工具將SQL SERVER中的數據導出為平面文件(Text或CSV格式),然后借助ORACLE的SQL LOADER工具將數據導入數據庫。
優點: 效率高、速度快,尤其導數的數據量非常大的情況下。SQL*LOADER的直接路徑裝載效率非常高:(direct path):采用這種模式,SQLLDR不使用SQL;而是直接格式化數據庫塊。
缺點:
1:需要寫一些腳本。如果有非常多的表需要導數,工作量較大
2:平面文件的格式會導致SQL LOADER裝載數據出現較多小問題。如果你精通SQL*LOADER的話,那么就可以避免踩到那些坑。
適用場景:大數據的導入導出。