2010-06-04 55 views
7

我們有2個數據庫 - DB1 & DB2。我可以跨數據庫創建外鍵嗎?

我可以在DB1中創建一個與DB2中的其中一個表有關係的表嗎? 換句話說,我可以在另一個數據庫的表中有一個外鍵嗎?

我用不同的用戶連接到這些數據庫。 任何想法?

現在,我收到錯誤:

ORA-00942:Table or view does not exist

回答

8

沒有,Oracle不會允許你創建通過數據庫鏈接引用一個表的外鍵約束。你將不得不使用觸發器來執行完整性。

+1

請記住任何一個數據庫的備份/恢復都可能會破壞這個「約束」。 – 2010-06-05 00:52:59

8

解決此問題的一種方法是在本地數據庫上創建主表的物化視圖,然後創建指向MV的完整性約束。

這是有效的。但它可能會導致一些問題。首先,如果您需要對物化視圖進行全面刷新,則需要在執行操作之前先禁用約束。否則,在引入新行之前,Oracle將無法刪除MV中的行。

其次,您可能會遇到一些時間延遲。例如,假設您將一條記錄添加到遠程站點的主表中。然後你想添加一個子記錄到本地表。但是MV每天都在刷新,而且還沒有發生。你會得到一個外鍵違規,只是因爲MV沒有刷新。

如果走這條路線,最安全的方法是在主表提交時將MV設置爲快速刷新。這意味着幾乎始終保持數據庫鏈接打開。如果您需要進行全面更新,您將有管理工作要做。

總而言之,我們通常會發現觸發器更容易。在某些情況下,我們只是在我們的邏輯模型中定義了FK,但是通過設置日常工作來手動實施,以檢查違規情況並提醒員工。當然,我們非常小心,所以這些警報非常罕見。

+0

我知道這是舊的,但值得一提的是,對於那些像我一樣通過谷歌發現此答案的人,您無法刷新dblink上的提交。 – 2017-03-16 13:54:13

相關問題