有人使用它时编译Oracle视图

时间:2018-02-21 15:51:31

标签: oracle plsql

如果我在其他人运行它时重新编译我的Oracle视图,数据库会被“阻止”,这是否正确?

如果是,这是UAT数据库,我经常这样做(更喜欢),而潜在的很多用户可能会使用它,所以我想知道这里有什么样的正确模式?选择没有其他人可能使用它的时间?虽然没有万无一失的方法可以确定。

PROD也有同样的问题,尽管我们在设置时间内重新编译它。

2 个答案:

答案 0 :(得分:0)

要检查当前是否正在遵守个人view,可以使用此sql

select sign(count(1))
  from gv_$sql_bind_capture b 
    inner join gv_$session s on ( b.sql_id = s.sql_id )
 where b.name = ':OBJECT_NAME'
   and s.status = 'ACTIVE' 
   and b.value_string = upper('&i_view_name'); -- when prompted enter your view name (no need to be case sensitive)
 /

如果您获得1,则其为compiled

如果您获得0NOT compiled

要查看当前正在编译的所有视图,请使用:

select b.value_string object_name
  from gv_$sql_bind_capture b 
    inner join gv_$session s on ( b.sql_id = s.sql_id )
    inner join dba_objects o on ( o.object_name = b.value_string )    
 where b.name = ':OBJECT_NAME'
   and s.status = 'ACTIVE'
   and o.object_type = 'VIEW'; 
  

可替换VIEW的相应文字o.object_type   PACKAGEPACKAGE BODYTRIGGERPROCEDURE甚至是TABLE   g

P.S。如果您使用gv_$sql_bind_capturegv_$session而不是v_$sql_bind_capturev_$session使用RAC作为数据字典视图的前缀,则可以将它们用于lagom-internal-meta-project-kafka数据库中。

答案 1 :(得分:0)

不,在查看该视图时,您可以alter view viewname compile。 (这可能与版本有关 - 在Oracle 12.1中检查过。)

我不确定这里的用例是什么。为什么视图需要编译?如果它无效,那么用户如何查询它?