文章詳情頁
SQL Server與Oracle鏈接服務(wù)器應(yīng)用
瀏覽:8日期:2023-11-15 18:22:03
;;;;最近要把.net開發(fā)的CMS系統(tǒng)跟Java開發(fā)的系統(tǒng)數(shù)據(jù)打通。由于N個系統(tǒng)用的數(shù)據(jù)庫有SQL-Server和Oracle兩種,之間的數(shù)據(jù)讀取成了最大的難題。;;;;我預(yù)備了兩種實行方案,進行了技術(shù)驗證。方案一:改寫底層數(shù)據(jù)層和邏輯層。方案二:把Oracle數(shù)據(jù)做定時導(dǎo)向,無需讓Cms做太大的改變。;;;;我做的CMS是基于模板的系統(tǒng)架構(gòu),底層規(guī)則已經(jīng)寫得比較死,要改換底層數(shù)據(jù)庫鏈接或者存在多個數(shù)據(jù)庫鏈接簡直根重寫系統(tǒng)沒有太大的區(qū)別,從開發(fā)成本上分析,決定使用第二方案,做數(shù)據(jù)采集工程。;;;;但是Oracle那邊的系統(tǒng)存在N個庫(即用戶),其中的讀取規(guī)則各不相同,要如何開發(fā)統(tǒng)一導(dǎo)表程序也是個大問題。其中邏輯非常復(fù)雜。風(fēng)險難以控制。在想了幾天之后,發(fā)現(xiàn)了MSSQL和Oracle互通的功能,大喜。接著就開始著手開發(fā)。于是有了這文章。;;;;在MSSQL中有個叫做鏈接服務(wù)器的功能(這個在Oracle里稱為透明網(wǎng)關(guān))。能把不同的異類數(shù)據(jù)庫附加鏈接到MSSQL中,做為一個“虛庫”(我給的名稱)使用。比如Oracle,DB2,Sybase,Access等等,基本上MS能提供驅(qū)動程序的都能做。架好服務(wù)器,開通個Job,就實現(xiàn)了定時導(dǎo)數(shù)據(jù)的功能。具體實現(xiàn):;;;;首先,在Oracle上創(chuàng)建View,給MsSql提供必要的數(shù)據(jù)源。;;;;在MsSql的服務(wù)器上安裝Oracle10g的客戶端。在ODBC創(chuàng)建好數(shù)據(jù)源。之后在MsSql上架設(shè)鏈接服務(wù)器。;;;;test一下。'SELECT id,title,thedate,summary,lid,city,ptype FROM {0}..{1}.{2}'; --0,為數(shù)據(jù)源名稱;1,為用戶名;2為表名。格式要依照PL/SQL語法。;ok~;;;;但是發(fā)現(xiàn),這樣讀取View出錯。所以換了一種寫法:;;;;select * from openquery(***,'SELECT id,title,thedate,summary,lid,city,ptype FROM ***.***')這樣是利用MsSql的分布式方法去讀取Oracle。接著,創(chuàng)建采集的存儲過程。SET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ON GOCREATE PROCEDURE [dbo].[usp_tranDigital] ASselect * from openquery(***,'SELECT id,title,thedate,summary,lid,city,ptype FROM ***.***')用游標(biāo)獲取結(jié)果集的行。這個方法在Oracle比較常用OPEN authors_cursorFETCH NEXT FROM authors_cursor into @ID,@TITLE,@THEDATE,@SUMMARY,@LID,@CITY,@PTYPEWHILE @@FETCH_STATUS = 0BEGINexecute Digital_Insert調(diào)用存儲過程插入。FETCH NEXT FROM authors_cursor into@ID,@TITLE,@THEDATE,@SUMMARY,@LID,@CITY,@PTYPEENDCLOSE authors_cursorDEALLOCATE authors_cursorGOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ON GO在Job里調(diào)用該存儲過程。任務(wù)完結(jié)。這樣,我在不要任何程序修改的情況下,把不同數(shù)據(jù)庫上的數(shù)據(jù)都挪到同一個地方。
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
