2009-01-21 95 views
3

我有一系列需要訪問彼此數據的Oracle數據庫。最有效的方法是使用數據庫鏈接 - 建立一些數據庫鏈接,我可以用最少的麻煩從A到B獲取數據。對我來說,問題在於最終採用緊密耦合的設計,如果一個數據庫出現故障,它可能會將耦合的數據庫與其結合(或者可能是這些數據庫中的應用程序的一部分)。在數據共享方面,解耦數據庫設計的最佳方法是什麼?

您嘗試過哪些方法來在Oracle數據庫之間共享數據?

更新一對夫婦的答覆後...

我並沒有考慮這麼多的複製,更多的訪問「主數據」。例如,如果我有一個具有貨幣轉換率的中央數據庫,並且希望將費率提取到單獨的數據庫(應用程序)中。對於這樣一個小的數據集,igor-db對數據庫鏈接的物化視圖的建議可以很好地工作。但是,當您從一個非常大的數據集動態採樣時,本地緩存選項開始變得更加棘手。在這種情況下你會選擇什麼樣的選擇。我想知道一個XML服務,但是tuinstoel(在對le dorfier的回覆的評論中)正確地質疑了所涉及的開銷。響應

摘要...

整體來說,我覺得伊戈爾-db是最接近的,這就是爲什麼我接受了答案,但我想我會加一點帶來了一些的其他答案。

對於我而言,在我期待在數據複製而已,它看起來像甲骨文基本的複製(而不是ADVANCED)複製是我的唯一。使用主站點上的物化視圖日誌和快照站點上的物化視圖看起來是一個很好的前進方向。

如果這不是一個選擇,也許其中的數據量充分表複製問題,那麼一個消息解決方案似乎是最合適的Oracle解決方案。 Oracle高級隊列似乎是建立消息傳遞解決方案的最快最容易的方法。

最小最好的辦法似乎是卷制自己的XML Web服務,但只有在相對容易的高級隊列是不是一種選擇。

回答

5

Streams是Oracle複製技術。 您可以使用數據庫鏈接上的MV(因此數據庫'A'具有來自數據庫'B'的數據的物化視圖。如果'B'關閉,則MV無法刷新,但數據仍處於'A' )。

里程可能依賴於數據庫卷,更改卷...

+0

感謝您的回覆。正如你所說,這取決於數據量。如果我有一個「小」的數據量,我可以在物化視圖中複製它。如果我想從一個更大的集合中動態地抽取一小部分數據,你會選擇XML服務嗎? – 2009-01-22 11:11:02

1

它看起來對我來說,它的定義,如果你需要多個數據庫同時同步訪問緊耦合。

如果這是關於傳輸數據時,例如,它可以是異步的,可以安裝在兩者之間的消息隊列,並有兩個過程,與來自源的一個閱讀和其它書寫到信宿。

+0

我沒有想過消息隊列 - 這將是異步訪問的方法。對於同步訪問,我從定義上講明瞭緊耦合的觀點,但我一直在尋找讓它更緊密耦合的選項。也許一個XML服務是一個選項。 – 2009-01-22 00:11:36

+0

如果您要在它們之間安裝「消息隊列」,請使用Oracle複製。把它看作專門針對你的問題量身定製的特殊用途消息隊列(將數據從一個Oracle數據庫移到另一個數據庫)。 – 2009-01-22 02:24:28

+0

在構建XML服務之前,最好先探索Oracle流,高級隊列和物化視圖。 XML服務是如此的開銷。 – tuinstoel 2009-01-22 08:42:48

1

的OP提供了更多的信息。他表示數據集非常大。那麼多大?多少次主表更改?

隨着使用物化視圖的記錄Oracle將只傳播在主表進行的更改。完全刷新數據不是必需的。Oracle流也僅將修改傳達給另一方。

購買存儲是便宜的,爲什麼不本地緩存?比編寫自己的解決方案便宜得多。

XML服務在數據庫不可用時不能幫助您,所以我不明白爲什麼它會有幫助? Oracle有很多複製選項,可以對它們進行探索。

編輯

我已經構建XML服務。它們通過清晰的界面(合同)提供不同系統之間的互操作性。您可以使用C#構建xml服務,並使用Java來使用該服務。但是,xml服務並不快。

+0

我認爲你是正確的使用物化視圖日誌來廉價地傳播更改。你也是對的,存儲是便宜的。我只是在查詢「大型」數據集時尋找允許鬆耦合的替代方案。 「大」當然是相對的 - 對我來說,它是3000萬行。 – 2009-01-25 00:37:28

+0

如果我的應用程序中有一個數據庫鏈接,並且遠程數據庫已關閉,那麼我的pl/sql程序包將會失敗。只是尋找替代品。如果遠程數據庫關閉,我會在調用應用程序中處理它。 – 2009-01-25 00:53:40

1

爲什麼不使用高級隊列?爲什麼要推出自己的XML服務來在Oracle實例之間移動消息(DML) - 它已經在那裏。您可以讓消息傳播將消息從一個實例移動到另一個實例。您可以根據需要在目標服務器中處理它們。 AQ的設置和使用非常簡單。

0

你需要什麼樣的直接性和雙向性?如果數據可能稍微老一點,並且可以從一個「主源」中提取數據,則可以創建一系列簡單的ETL腳本按計劃運行,以將數據從「源」數據庫提取到其他數據庫。

然後,您可以調整數據的結構以更精確地滿足客戶端數據庫的需求,並且可以更改源數據的結構,直到您滿意爲止。

1

他們爲什麼需要成爲獨立的數據庫?

使單個數據庫/實例具有多個模式可能會更容易。

保持一個數據庫(具有適當的備用數據庫等)比保持N更容易。

相關問題