2013-03-13 122 views
0

我正在部署爲兩個獨立站點的ASP.NET Web應用程序。每個站點都由它自己的相同(相同模式)ORACLE數據庫(10g)實例支持,但每個數據庫都包含「獨立」數據。一個站點僅包含「安全數據」,另一個站點僅包含「打開的數據」。只有少數用戶可以看到安全站點和安全數據,而開放站點可供大多數公司使用。Oracle:我應該使用複製嗎?

安全站點用戶現在希望能夠從安全站點看到安全和開放的數據。另外,他們希望能夠修改打開的數據,並且需要將來自安全站點的打開數據的更改傳播到開放站點,並且需要相應地處理衝突。

我希望只有數據庫解決方案,因爲我們的報告綁定到存儲過程,現在需要爲安全用戶顯示安全和開放的數據。

我們可以假設數據被相應標記爲安全(Y/N)。

我們目前的路徑似乎不太理想。它涉及修改安全數據庫以包含到開放數據庫的數據庫鏈接。我們還向安全數據庫添加額外視圖,以通過數據庫鏈接「聯合」安全和開放數據。與此同時,我們正在檢查安全站點上的原始存儲過程以處理CRUD操作,例如,

if (someRecord.IsSecure = 'Y') 
update secure data; 
else 
update open data; 

在我們進一步研究之前,我想了解一下是否有更好的方法來解決這個問題,比如通過複製。

我一直在看multi-master replication。這看起來是否正確?有沒有人遇到過這種情況?

+0

複製可以很快變得複雜,特別是雙向複製。仔細閱讀oracle文檔。我不知道你是否對任何PK使用oracle序列,但是如果它們不同步或者在兩個dbs中存在不同的實體,那總是很痛苦。我只使用單向複製。它確實有用,但需要進行大量的計劃,測試,測試和測試! – OldProgrammer 2013-03-13 16:59:35

回答

1

在我正在研究的項目中,我們使用Oracle Streams來支持多主複製(我們在紐約,倫敦和新加坡全球運營3個站點,都需要讀取和更新相同數據的能力)。

流支持我們用於監管要求的條件複製(例如在新加坡,私人銀行客戶端數據不能離開該國)。

使用Streams,您可以例如複製整個模式(DML和/或DDL)或只是一個表的列表。在事務中,你可以控制數據流,使複製的對象上各行的操作不會複製..eg:對於這樣一個場景,is_secure是真的

if (is_secure) 
then 
    dbms_streams.set_tag('01'); -- set a non null tag to prevent replication. 
end if; 

insert into your_table()..values(); 

if (is_secure) 
then 
    dbms_streams.set_tag(''); -- set a the null tag back 
end if; 

insert into your_table()..values(); 

,只有第二條規則將複製(你可以設置你如果存在非空流標記,則不復制複製規則)。所以在你的代碼中,如果數據是安全的,你只需設置這個標籤。這種方式流不會將此事務應用於遠程站點。

對於多主複製,您應該預先考慮「衝突」的可能性,即兩個+站點並行修改相同數據的可能性。你應該處理這個問題(你可以設置適用於複雜場景的處理程序)來解決衝突而不會導致應用錯誤。例如,這將是一個複製的對象一個糟糕的設計:

create table foo 
(
    id number primary key, 
    data 
); 
create sequence foo_seq start with 1 increment by 1; 

如果在這兩個網站上創建的,在平行有人發佈現場1:

insert into foo (id, data) values (foo_seq.nextval, 'a'); 

與本站2:

insert into foo (id, data) values (foo_seq.nextval, 'b'); 

這兩個站點都嘗試在主鍵中插入「1」。這會在複製時失敗,並且最終會出現應用錯誤。

,你可以上的其他內線一個env和start with 101 increment by 100每個ENV例如start with 100 increment by 100這將消除這一問題,和/或添加設置爲12等,爲每個站點location_id列設置不同的序列。

此外,您需要更新ale以處理同時更新同一行的兩個站點(因爲站點之間總是存在一點延遲......延遲越多,進入需要衝突的場景的變化越多處理)。

流設置和理解有點複雜,所以您需要仔細閱讀相關主題。它非常成熟並且仍然得到支持,但就增強而言,從現在開始它不會太多,因爲Oracle專注於Goldengate(GG是許可產品,因此會產生額外成本,而Streams是企業許可證的一部分)。

+0

謝謝。我會看看Oracle流。 – 2013-03-13 19:01:39