[zt SQL Server2005複製功能實現與Oracle資料庫同步

tolywang發表於2009-05-21


利用SQLServer2005複製功能實現與Oracle資料庫同步
 
在專案中經常會遇到一個專案操作幾個資料庫的情況,若是同種型別的資料庫也還好說,可以直接連結兩個資料庫,也可以用資料庫的同步功能。若我們的專案使用SQLServer2005進行開發,而且專案中要用到Oracle資料庫中的資料,那麼又該怎麼實現拉?一般來說方案有以下幾種。
1.分別建立連結對資料庫進行操作,SQLServer可以用ADO.NET,操作Oracle可以用OLEDB或者用System.Data.OracleClient(需要新增引用才能用)
這種方案的優點就是簡單,各自寫各自的資料庫操作程式碼,缺點就是不能將兩個資料庫中的表直接進行聯合查詢,連結Oracle的每臺機器必須安裝OracleClient才可以使用。
2.使用同義詞操作Oracle資料庫。
這種方法的具體操作我在以前的文章中已經寫清楚了,這樣做一來可以進行表的聯合查詢二來不需要每臺機器都安裝OracleClient,但是還是有一個缺點:效率低,比如對同義詞使用like去查詢需要的資料,如果是直接連Oracle資料庫也許只要0.1秒就可以找到答案,但是用同義詞可能就要等10秒20秒或更久。原來SQLServer並不是直接把查詢語句傳遞給Oracle,讓Oracle執行操作,而是將所有資料都取到SQLServer伺服器上,邊取資料邊分析,直到滿足查詢條件為止。其實這種資料放在兩個伺服器上還有一個缺點就是一旦Oracle伺服器當機,即使我們這邊的所有伺服器都是好的,那麼我們的程式中用到Oracle資料的地方就無法使用。
3.直接連結Oracle資料庫+同義詞+作業+異常跳轉 方式。
這種方法具體講就是我們的程式直接用OLEDB(OracleClient)連結Oracle資料庫,同時SQLServer伺服器也建立了同義詞指向Oracle,在SQLServer上建立作業,將同義詞中的資料複製到SQLServer伺服器的表中。一旦Oracle當機,程式中就會捕捉到異常,於是就使用SQLServer中的資料。這樣做比較複雜,需要一定的程式設計,效率也不是特別高,但是優點也是明細的,平時連結Oralce伺服器,異常情況下連結SQLServer中的備份資料,保證了程式的正常執行。
4.直接編寫一個程式,以服務或自啟動方式一直執行,每隔一段時間將Oracle資料庫中的資料寫到SQLServer資料庫中。
這種方法就是程式設計複雜,具有很大難度。
5.利用SQLServer2005的複製功能將Oracle資料庫中的資料同步到SQLServer伺服器中,程式只操作SQLServer,不連結Oracle資料庫。
這種方法不需要編寫任何程式碼,由於只對SQLServer進行查詢,所以查詢效率高可以做多表連結,開發人員也不需要再裝OracleClient,也不用害怕Oracle伺服器當機導致我們的相關程式無法使用。優點倒是很多,那麼有沒有缺點拉?缺點還是有的,主要是取得的資料不是實時的資料,Oracle那邊的資料更新了,我們這邊還有可能是老資料。
前面的四種方法我就不用多講了,這次主要是講第五種方法的具體實現:

1.安裝SQLServer複製功能。
在安裝SQLServer資料庫的時候選上“複製”,將“複製”功能安裝到伺服器。微軟說如果第一次安裝的時候沒有裝,以後再想新增該功能只需要執行安裝程式將“複製”選上就可以了,不過說是這麼說,我試了幾次都不行,我也不知道怎麼回事,為了安裝上覆制,所以將SQLServer解除安裝了,重新安裝!這種方法很笨,不過我實現想不出其他辦法了,希望高手指點。
2.設定Oracle伺服器端的許可權。
建立一個用於複製用的使用者,授予下列許可權:
CREATE PUBLIC SYNONYM 和 DROP PUBLIC SYNONYM
CREATE PROCEDURE
CREATE SEQUENCE
CREATE SESSION
還必須直接為使用者授予下列許可權(不是透過角色):
CREATE ANY TRIGGER。
CREATE TABLE
CREATE VIEW
同時該使用者還必須對要釋出的表所在表空間有UNLIMITED的許可權,還要針對每個要用於同步的表設定Select許可權。
3.SQLServer伺服器上安裝OracleClient10g
必須安裝了才可以連結Oracle伺服器,不推薦安裝Oracle9i,即使我們要連結的Oracle是9i的。安裝完成以後重啟SQLServer伺服器。用PLSQL或其他工具測試一下是否可以連結到Oracle伺服器。
4.設定SQLServer Agent許可權
在SQLServer伺服器上 新建使用者,將該使用者加為管理員,在“服務”中找到“SQLServer Agent”,將其啟動使用者改為該使用者,重啟該服務。
5.配置分發
開啟ManagementStudio右鍵“複製”節點,選中“配置分發”,按嚮導一步一步操作,將快照資料夾路徑指定為一個專門的共享資料夾,其他都不用修改,完成配置分發。
6.新增Oracle釋出
右鍵“本地釋出”->“新建Oracle釋出”,啟動Oracle釋出嚮導,新增Oracle伺服器,將在Oracle伺服器上新建的使用者密碼輸入,一直下一步,選快照發布,選中需要釋出的表,選中“立即建立快照發布”和“計劃執行快照代理”,計劃時間就自己根據需要設定,“快照代理”選擇“代理服務帳戶”,釋出名稱填寫需要的名稱,比如“Test1”,然後點選完成。這樣就完成了釋出工作。
7.新增Oracle訂閱
右鍵“本地訂閱”->“新建訂閱”執行嚮導,選中剛才新建的Test1釋出,一般選中“推送訂閱”,指定要訂閱的資料庫(比如:mis),也就是要用來儲存Oracle資料的資料庫,訂閱屬性中選中用SQLServer代理使用者執行,代理計劃“連續執行”,初始化時間“立即”,然後建立訂閱完成。
這個時候我們開啟訂閱的資料庫mis,我們可以看到其中新增了Oracle釋出出來的表,而且這些內容會按照計劃隔段時間同步Oracle資料一次。
到此我們的同步完成。
8.測試是否同步成功
用PLSQL往Oracle中寫入資料,修改資料,刪除資料,如果釋出時候選中的是每一分鐘執行快照代理一次,那麼隔一分鐘後,我們再去開啟SQLServer中的表,我們可以看到其中的內容和Oracle一樣進行了變化。
PS:在“本地釋出”下選中我們的釋出,右鍵,“檢視代理執行狀態”可以看到我們的釋出是否成功。  


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-600640/,如需轉載,請註明出處,否則將追究法律責任。

相關文章