[zt SQL Server2005複製功能實現與Oracle資料庫同步
利用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下mysql主從複製,實現資料庫同步LinuxMySql資料庫
- oracle9i下streams複製(zt)Oracle
- mysql資料庫實現主從複製MySql資料庫
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- Oracle DBLink跨資料庫訪問SQL server資料同步 踩坑實錄Oracle資料庫SQLServer
- sybase複製(zt)
- 【SQL】Oracle資料庫通過job定期重建同步表資料SQLOracle資料庫
- 前端實現複製功能前端
- SQL Server2005使用CTE實現遞迴QCSQLServer遞迴
- 利用SQL Server Management Studio(SSMS)複製資料庫SQLServerSSM資料庫
- 教你如何運用python實現不同資料庫間資料同步功能Python資料庫
- Oracle SQL optimization-2(zt)OracleSQL
- oracle sqldeveloper選擇性複製備份資料庫OracleSQLDeveloper資料庫
- 資料庫複製(一)–複製介紹資料庫
- MongoDB複製集資料同步流程MongoDB
- UAVStack的慢SQL資料庫監控功能及其實現SQL資料庫
- oracle資料庫自動發郵件實現報警功能Oracle資料庫
- DM7資料複製之資料庫級複製資料庫
- 用canal監控binlog並實現mysql定製同步資料的功能MySql
- 高效資料移動指南 | 如何快速實現資料庫 SQL Server 到 Dameng 的資料同步?資料庫SQLServer
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- SQL Server實戰二:建立、修改、複製、刪除資料庫表並加以資料處理SQLServer資料庫
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- JavaScript實現複製和貼上功能JavaScript
- 資料共享(淺複製)與資料獨立(深複製)
- Oracle跨主機複製資料庫背後的意義Oracle資料庫
- 資料庫主從複製資料庫
- TiDB 異構資料庫複製最佳實踐TiDB資料庫
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- JS如何實現點選複製功能,JS點選複製文字JS
- 概括SQL Server實時查詢Oracle資料庫WSSQLServerOracle資料庫
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- Linux實現MySql資料庫的主從複製(一主一從)LinuxMySql資料庫
- ORACLE PL/SQL 物件、表資料對比功能儲存過程簡單實現OracleSQL物件儲存過程
- 分散式資料庫下子查詢和 Join 等複雜 SQL 如何實現?分散式資料庫SQL
- PostgreSQL邏輯複製資料同步到kafkaSQLKafka
- Vue中結合clipboard實現複製功能Vue
- 在vSphere中實現複製貼上功能