1.分別建立鏈接對數據庫進行操作,sqlserver可以用ado.net,操作oracle可以用oledb或者用system.data.oracleclient(需要添加引用才能用)
這種方案的優(yōu)點就是簡單,各自寫各自的數據庫操作代碼,缺點就是不能將兩個數據庫中的表直接進行聯合查詢,鏈接oracle的每臺機器必須安裝oracleclient才可以使用。
2.使用同義詞操作oracle數據庫。
這種方法的具體操作我在以前的文章中已經寫清楚了,這樣做一來可以進行表的聯合查詢二來不需要每臺機器都安裝oracleclient,但是還是有一個缺點:效率低,比如對同義詞使用like去查找需要的數據,如果是直接連oracle數據庫也許只要0.1秒就可以找到答案,但是用同義詞可能就要等10秒20秒或更久。原來sqlserver并不是直接把查詢語句傳遞給oracle,讓oracle執(zhí)行操作,而是將所有數據都取到sqlserver服務器上,邊取數據邊分析,直到滿足查詢條件為止。其實這種數據放在兩個服務器上還有一個缺點就是一旦oracle服務器宕機,即使我們這邊的所有服務器都是好的,那么我們的程序中用到oracle數據的地方就無法使用。
3.直接鏈接oracle數據庫+同義詞+作業(yè)+異常跳轉 方式。
這種方法具體講就是我們的程序直接用oledb(oracleclient)鏈接oracle數據庫,同時sqlserver服務器也建立了同義詞指向oracle,在sqlserver上建立作業(yè),將同義詞中的數據拷貝到sqlserver服務器的表中。一旦oracle宕機,程序中就會捕捉到異常,于是就使用sqlserver中的數據。這樣做比較復雜,需要一定的編程,效率也不是特別高,但是優(yōu)點也是明細的,平時鏈接oralce服務器,異常情況下鏈接sqlserver中的備份數據,保證了程序的正常運行。
4.直接編寫一個程序,以服務或自啟動方式一直運行,每隔一段時間將oracle數據庫中的數據寫到sqlserver數據庫中。
這種方法就是編程復雜,具有很大難度。
5.利用sqlserver2005的復制功能將oracle數據庫中的數據同步到sqlserver服務器中,程序只操作sqlserver,不鏈接oracle數據庫。
這種方法不需要編寫任何代碼,由于只對sqlserver進行查詢,所以查詢效率高可以做多表鏈接,開發(fā)人員也不需要再裝oracleclient,也不用害怕oracle服務器宕機導致我們的相關程序無法使用。優(yōu)點倒是很多,那么有沒有缺點拉?缺點還是有的,主要是取得的數據不是實時的數據,oracle那邊的數據更新了,我們這邊還有可能是老數據。
前面的四種方法我就不用多講了,這次主要是講第五種方法的具體實現:
1.安裝sqlserver復制功能。
在安裝sqlserver數據庫的時候選上“復制”,將“復制”功能安裝到服務器。微軟說如果第一次安裝的時候沒有裝,以后再想添加該功能只需要運行安裝程序將“復制”選上就可以了,不過說是這么說,我試了幾次都不行,我也不知道怎么回事,為了安裝上復制,所以將sqlserver卸載了,重新安裝!這種方法很笨,不過我實現想不出其他辦法了,希望高手指點。
2.設置oracle服務器端的權限。
創(chuàng)建一個用于復制用的用戶,授予下列權限:
create public synonym 和 drop public synonym
create procedure
create sequence
create session
還必須直接為用戶授予下列權限(不是通過角色):
create any trigger。
create table
create view
同時該用戶還必須對要發(fā)布的表所在表空間有unlimited的權限,還要針對每個要用于同步的表設置select權限。
3.sqlserver服務器上安裝oracleclient10g
必須安裝了才可以鏈接oracle服務器,不推薦安裝oracle9i,即使我們要鏈接的oracle是9i的。安裝完成以后重啟sqlserver服務器。用plsql或其他工具測試一下是否可以鏈接到oracle服務器。
4.設置sqlserver agent權限
在sqlserver服務器上 新建用戶,將該用戶加為管理員,在“服務”中找到“sqlserver agent”,將其啟動用戶改為該用戶,重啟該服務。
5.配置分發(fā)
打開managementstudio右鍵“復制”節(jié)點,選中“配置分發(fā)”,按向導一步一步操作,將快照文件夾路徑指定為一個專門的共享文件夾,其他都不用修改,完成配置分發(fā)。
6.添加oracle發(fā)布
右鍵“本地發(fā)布”->“新建oracle發(fā)布”,啟動oracle發(fā)布向導,添加oracle服務器,將在oracle服務器上新建的用戶密碼輸入,一直下一步,選快照發(fā)布,選中需要發(fā)布的表,選中“立即創(chuàng)建快照發(fā)布”和“計劃運行快照代理”,計劃時間就自己根據需要設定,“快照代理”選擇“代理服務帳戶”,發(fā)布名稱填寫需要的名稱,比如“test1”,然后點擊完成。這樣就完成了發(fā)布工作。
7.添加oracle訂閱
右鍵“本地訂閱”->“新建訂閱”運行向導,選中剛才新建的test1發(fā)布,一般選中“推送訂閱”,指定要訂閱的數據庫(比如:mis),也就是要用來存儲oracle數據的數據庫,訂閱屬性中選中用sqlserver代理用戶運行,代理計劃“連續(xù)運行”,初始化時間“立即”,然后創(chuàng)建訂閱完成。
這個時候我們打開訂閱的數據庫mis,我們可以看到其中添加了oracle發(fā)布出來的表,而且這些內容會按照計劃隔段時間同步oracle數據一次。
到此我們的同步完成。
8.測試是否同步成功
用plsql往oracle中寫入數據,修改數據,刪除數據,如果發(fā)布時候選中的是每一分鐘運行快照代理一次,那么隔一分鐘后,我們再去打開sqlserver中的表,我們可以看到其中的內容和oracle一樣進行了變化。
ps:在“本地發(fā)布”下選中我們的發(fā)布,右鍵,“查看代理運行狀態(tài)”可以看到我們的發(fā)布是否成功。
更多信息請查看IT技術專欄