假設有2種模式A
和B
:是否安全並可以使用循環依賴關係恢復Oracle轉儲?
B
從A
表A
定義若干視圖中定義了一些觸發器,其使用的功能從B
架構。
是否可以爲A
或B
創建轉儲並稍後恢復?例如,如果我創建轉儲A
並嘗試將其還原到Oracle實例,而沒有B
我收到編譯錯誤。那麼A
或B
轉儲是否可以在沒有編譯錯誤的情況下恢復? (可能會恢復A
,然後B
並再次從A
恢復錯誤部分)。有沒有辦法處理這種情況?
假設有2種模式A
和B
:是否安全並可以使用循環依賴關係恢復Oracle轉儲?
B
從A
表A
定義若干視圖中定義了一些觸發器,其使用的功能從B
架構。是否可以爲A
或B
創建轉儲並稍後恢復?例如,如果我創建轉儲A
並嘗試將其還原到Oracle實例,而沒有B
我收到編譯錯誤。那麼A
或B
轉儲是否可以在沒有編譯錯誤的情況下恢復? (可能會恢復A
,然後B
並再次從A
恢復錯誤部分)。有沒有辦法處理這種情況?
循環依賴通常被認爲是一件壞事。最佳實踐最近的事情是沒有他們。有第三個模式C
其中有一個或兩個模式共享的東西。所以,一些變化:
C
- >B
和C
- >A
,或C
- >B
- >A
,或B
- >C
- >A
這提供了一個清晰的恢復路徑:當我們恢復A
(無)或時,我們可以計算出什麼會中斷(也許是一切)。
但是,鑑於你是你所在的地方,需要記住的是代碼可以重新編譯。我們可以創建缺少依賴關係的包,函數和觸發器;它們將是無效的,但是一旦依賴關係到位,就可以重新編譯它們。
視圖略有不同;除非我們使用FORCE關鍵字,否則它們將失敗,除非我們使用FORCE關鍵字:create or replace force v_whatever as ...
。使用FORCE後,視圖將在無效狀態下創建,以便稍後重新編譯。
另一個複雜性是對無效對象的授權將失敗。您有循環撥款,這將使恢復變得困難,因爲您需要先獲得B
有效的對象,然後纔可以授予A
,反之亦然。
最後一件事:依靠dump(export)來備份代碼可能是個壞主意。使用PL/SQL程序,視圖等的源代碼控制。它比導入模式提供更多的部署控制。
您的意思是「意見」或「物化視圖」?有一個區別。 – APC
我的意思是,如果你用'物化視圖'功能提供擴展答案,它將會很好。 – Cherry