Wednesday, April 11, 2012

資料整合Oracle --> MSSQL

有個專案需要從Oracle DB中定時的同步資料到SQL Server

由於SSIS看似簡單 但是實作起來問題實在太多

最後還是採取熟悉的Store Procedure

在SSMS當中 要取得別台SQL Server的資料算是很簡單

只要加上Linked Server 就可以用完整的Table名稱來操作

但是要取得Oracle的資料 就比較麻煩點



先安裝Oracle Client

在安裝選定的路徑下D:\oracle\product\10.2.0\client_2\NETWORK\ADMIN

會有一個tnsnames.ora檔案

編輯此檔案加入以下

TC_188 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.113.2.188)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = tc)
)
)


在SSMS當中新增連結的伺服器(Linked Server)

提供者選擇Microsoft OLE DB Provider for Oracle

資料來源就輸入在連線設定檔中的TC_188 伺服器名稱可以自訂

在此以Ora為例

建立連線後就可以用以下語法讀取Oracle


select * into #tmp
from OPENQUERY (Ora,N'select * from OWNERNAME.TABLENAME')


我的做法就是把要處理的資料先寫入tempdb

這樣接下來的處理就不必考慮Oracle的語法問題

如果要回寫一些資訊回到Oracle 可以用以下語法


update OPENQUERY(Ora,'select C1,C2,C3 from OWNERNAME.TABLENAME
where C4 = ''Sobi'' and C5 = ''Chen'' ')
set C1= 'F',C3 = @@error where C3 = @C3


update條件式與要更新的欄位都需要出現在查詢式當中

Oracle 對欄位的大小寫滿敏感的

OWNERNAME 不輸入的話也常常會有錯誤

初次接觸Oracle 寫得不甚詳盡

如有錯誤 還請各位高手指點

No comments:

Post a Comment