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

时间:2017-03-31 04:00:58

标签: 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正在访问视图,重命名过程就无法编译视图。

请分享您对如何克服这个问题的看法。

地塞米松。

1 个答案:

答案 0 :(得分:0)

当对基础view进行更改时,依赖table无效,而Oracle将在访问时自动重新编译view

因此,在您的示例中,VW在<{1}}被删除时无效, 当Table A重命名为T_A时仍然无效,但只要有人查询A,就会自动重新编译,查询正常运行, view变为有效

因此无需在脚本中明确重新编译view