创建非物化视图需要在oracle中占用大量时间和CPU

时间:2013-07-20 01:00:57

标签: oracle view oracle10g

我正在努力将应用程序从Access迁移到Oracle,并遇到了一个奇怪的问题。所以我们有一个常规的oracle模式 - 没什么特别的。在该模式的顶部,我创建了许多视图 - 大约15个。这些视图互相使用,依赖树可以很深 - 我说最多6-8个级别。

所以现在当我无法创建另一个视图时,我遇到了一个问题 - 当我执行'create or replace view'语句时,oracle服务器上的CPU达到50%并且它需要永远。视图现在处于这样一种状态,即从这些视图中选择数据可能需要一些时间,但问题出现在“创建”语句中。我不是在视图中使用'select * ...'而且有问题的视图仅取决于其他两个。

我正在使用Oracle 10g Enterprise v 10.2 在SQL Server中,我熟悉Profiler并会进行跟踪,查看模式锁,但我不太了解Oracle。

会欣赏任何提示。谢谢。

1 个答案:

答案 0 :(得分:1)

引用引用视图的视图的视图对我来说非常不必要。我知道我们都应该赞成“不要重复自己”,但是DRY是一个指导方针,而不是铸铁规则。当然不打算在没有编译的数据库环境中如此紧凑地应用它。

因此尝试分离出所有视图,以便每个视图仅引用FROM子句中的表。这应该可以解决您的问题并允许您在代码中取得进展。

您可以随时查看情况。关于视图的巧妙之处在于它只是一个界面。如果您后来想要重构某些视图,那么用最少的不便来替换具有视图的表,除非您重新引入编译挂起。(