有個專案需要從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檔案
編輯此檔案加入以下
在SSMS當中新增連結的伺服器(Linked Server)
提供者選擇Microsoft OLE DB Provider for Oracle
資料來源就輸入在連線設定檔中的TC_188 伺服器名稱可以自訂
在此以Ora為例
建立連線後就可以用以下語法讀取Oracle
我的做法就是把要處理的資料先寫入tempdb
這樣接下來的處理就不必考慮Oracle的語法問題
如果要回寫一些資訊回到Oracle 可以用以下語法
update條件式與要更新的欄位都需要出現在查詢式當中
Oracle 對欄位的大小寫滿敏感的
OWNERNAME 不輸入的話也常常會有錯誤
初次接觸Oracle 寫得不甚詳盡
如有錯誤 還請各位高手指點
由於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