Sql 无法获取视图上的锁以重新编译它

Sql 无法获取视图上的锁以重新编译它,sql,plsql,oracle11g,Sql,Plsql,Oracle11g,在基表a和B上创建了视图VW。有一个ETL过程将数据加载到T_a和T_B。数据加载完成后,作业触发重命名过程。此过程将T_A重命名为A,表A重命名为T_A。同样,T_B表重命名为B,表B重命名为T_B 当这种重命名发生时,视图将变得无效,为了使其有效,必须重新编译它 为了解决这个问题,在重命名过程的末尾添加了视图编译语句。它工作正常,但问题是,假设用户A正在访问视图数据,同时触发了我的重命名过程。现在,只要用户A访问该视图,重命名过程就无法编译该视图 请分享你对如何克服这个问题的想法 索引。当对

在基表a和B上创建了视图VW。有一个ETL过程将数据加载到T_a和T_B。数据加载完成后,作业触发重命名过程。此过程将T_A重命名为A,表A重命名为T_A。同样,T_B表重命名为B,表B重命名为T_B

当这种重命名发生时,视图将变得无效,为了使其有效,必须重新编译它

为了解决这个问题,在重命名过程的末尾添加了视图编译语句。它工作正常,但问题是,假设用户A正在访问视图数据,同时触发了我的重命名过程。现在,只要用户A访问该视图,重命名过程就无法编译该视图

请分享你对如何克服这个问题的想法


索引。

当对基础
进行更改时,从属
视图
无效,Oracle将在访问
视图时自动重新编译该视图

因此,在您的示例中,
VW
在删除
表A
无效, 当
T_A
重命名为
A
时,它仍然是无效的,但一旦有人查询
视图
,它就会自动重新编译,查询工作正常,
视图
变为有效


因此,无需在脚本中显式地重新编译
视图

不,事实并非如此……当有人查询视图时,该视图不会自动编译……它正在运行forever@Dex这很奇怪-因为我在发布之前在
11g
上测试了上述场景。。。
T\u A
A
的结构是否完全相同?我尝试过的是删除一个
,重新创建相同的
——而
视图的行为就是我所描述的….@Dex实际上就是您描述它的方式。。。似乎oracle试图重新编译视图。。。但它正在等待视图首先被解锁。。。你会永远等待。。是否有什么原因可能导致此初始锁定?在我的情况下,我不会删除表…将_T重命名为_A,表的结构是相同的,但索引是相同的different@Dex能否尝试将
A
重命名为
A_old
(此操作将使
视图无效)
,然后将
A_old
重命名回
A
(与以前一样-因此结构和索引都相同),然后检查查询是否挂起(没有显式编译视图)?