我正在努力将应用程序从Access迁移到Oracle,并遇到了一个奇怪的问题。所以我们有一个常规的oracle模式 - 没什么特别的。在该模式的顶部,我创建了许多视图 - 大约15个。这些视图互相使用,依赖树可以很深 - 我说最多6-8个级别。
所以现在当我无法创建另一个视图时,我遇到了一个问题 - 当我执行'create or replace view'语句时,oracle服务器上的CPU达到50%并且它需要永远。视图现在处于这样一种状态,即从这些视图中选择数据可能需要一些时间,但问题出现在“创建”语句中。我不是在视图中使用'select * ...'而且有问题的视图仅取决于其他两个。
我正在使用Oracle 10g Enterprise v 10.2 在SQL Server中,我熟悉Profiler并会进行跟踪,查看模式锁,但我不太了解Oracle。
会欣赏任何提示。谢谢。
答案 0 :(得分:1)
引用引用视图的视图的视图对我来说非常不必要。我知道我们都应该赞成“不要重复自己”,但是DRY是一个指导方针,而不是铸铁规则。当然不打算在没有编译的数据库环境中如此紧凑地应用它。
因此尝试分离出所有视图,以便每个视图仅引用FROM子句中的表。这应该可以解决您的问题并允许您在代码中取得进展。
您可以随时查看情况。关于视图的巧妙之处在于它只是一个界面。如果您后来想要重构某些视图,那么用最少的不便来替换具有视图的表,除非您重新引入编译挂起。(