在Oracle中部署相同视图的多个版本

时间:2011-08-03 14:47:38

标签: sql database oracle views versioning

欢迎任何轶事评论或建议。

我们的应用程序通过视图使用第三方供应商数据。该企业已要求我们绑定到先前版本的视图的应用程序应该能够继续使用它们,而不是必须与视图的每个更新的供应商版本同步。应用程序“A”应该能够使用视图的v.1.1,而应用程序“B”使用视图的v.1.2,这两个视图都与全局模式/命名空间中的相同表进行交互。

人们建议使用版本号命名视图,但对于与更新版本的视图保持同步的应用程序来说这似乎很麻烦。这个问题有更好的解决方案吗?也许将每个受支持的视图版本保留在它自己的模式中,并使视图从定义表的全局模式和数据所在的位置拉出?

4 个答案:

答案 0 :(得分:6)

如果要维护视图层,通常会通过将v1.2更改限制为向现有视图添加其他列或添加其他视图来保持版本之间的兼容性。不想升级的应用程序将继续使用现有视图的现有列,而想要升级的应用程序可以使用新视图。 Oracle数据字典视图就是这种方法的一个很好的例子。在每个新版本中,都有许多新视图为需要它的应用程序公开新功能。但是,针对Oracle 7中的数据字典视图编写的脚本将很乐意针对11.2数据库运行(可能效率较低)。

这与维护任何其他类型的API没有什么不同。在发布1.2版本时,通常不会删除现有的API调用或强制用户将其他参数传递给API。相反,您将旧的API调用转换为新版本。当然,您可能不得不弃用API的某些部分并强制现有应用程序进行小幅升级。但这些是相对罕见的,只需要应用程序更改代码,使得一个不推荐的调用 - 应用程序不需要完全升级到新的v1.2 API。

答案 1 :(得分:2)

如果您使用的是11gR2,则应查看基于版本的重新定义。它几乎可以满足您的需求,除此之外还有很多其他功能。 Find out more

答案 2 :(得分:1)

您可以选择使用视图的同义词从供应商中抽象出视图的代码名称,这样您的应用就会消耗一个特定的名称,而实际的视图会从更改中提取数据。 如果您想避免同义词使用,那么从供应商的相应视图中选择创建您自己的视图,效果相同但没有同义词。

答案 3 :(得分:0)

您基本上列出了两个可行的选项:使用特定于版本的名称命名视图或使用特定于版本的模式。无论哪种方式,您都需要复制视图定义并为特定于版本的应用程序重新创建它。

假设您真的对维护视图的完整副本感兴趣,这应该不会太令人头痛。