2011-08-03 27 views
4

歡迎提供任何軼事意見或建議。在Oracle中部署相同視圖的多個版本

我們有通過視圖消費第三方供應商數據的應用程序。業務部門已經要求我們綁定到以前版本視圖的應用程序應該能夠繼續使用它們,而不必與每個更新的視圖供應商版本同步。應用程序「A」應該能夠使用視圖的v.1.1,而應用程序「B」使用視圖的v.1.2,它們都與全局模式/名稱空間中的相同表進行交互。

人們建議使用發行版號命名視圖,但對於與更新的視圖版本保持同步的應用程序來說,這似乎很麻煩。有沒有更好的解決這個問題?也許將視圖的每個受支持版本保留在其自己的模式中,並將視圖從定義表的全局模式和數據所在的位置拉出來?

+0

[Programmers SE](http://programmers.stackexchange.com/) –

回答

6

如果您要維護視圖圖層,通常會通過限制您的v1.2更改向現有視圖添加其他列或添加其他視圖來保持版本之間的兼容性。不想升級的應用程序將繼續使用現有視圖的現有列,而想要升級的應用程序則可以使用新視圖。 Oracle數據字典視圖是這種方法的一個很好的例子。在每個新版本中,都有數十個新視圖爲需要它的應用程序提供新功能。但是,針對Oracle 7中的數據字典視圖編寫的腳本將很高興地運行在11.2數據庫上(可能效率較低)。

這與維護任何其他類型的API確實沒有什麼不同。在發佈1.2版本時,通常不會取消現有API調用或強制用戶將其他參數傳遞給API。相反,你祖父舊API調用到新版本。當然,您可能不時會棄用API的某些部分,並強制現有的應用程序進行小的升級。但是這些相對比較少見,只需要應用程序更改代碼來製作一個棄用的調用 - 應用程序不需要完全升級到新的v1.2 API。

+0

+1的一個很好的問題。我始終對Oracle字典視圖中的向後兼容性給予了很多尊重。許多其他關係型數據庫引入了與其字典行爲變化有關的細微問題。 –

0

您基本上列出了兩種可行的選項:或者將視圖命名爲特定於版本的名稱,或者使用特定於版本的模式。無論哪種方式,您都需要複製視圖定義併爲特定於版本的應用程序重新創建它。

假設您真的對維護視圖的完整副本感興趣,這應該不會太令人頭疼。

1

您可以選擇從使用視圖同義詞的供應商中抽象出您的代碼視圖名稱,以便您的應用程序使用特定名稱,而實際視圖數據正在從更改中提取。 如果您想避免使用同義詞,請從供應商的相應視圖中選擇自己的視圖,但效果相同,但沒有同義詞。

2

如果您使用的是11gR2,則應該查看基於版本的重新定義。它幾乎完成了你想要的,還有其他很多。 Find out more

相關問題