如果我在其他人运行它时重新编译我的Oracle视图,数据库会被“阻止”,这是否正确?
如果是,这是UAT数据库,我经常这样做(更喜欢),而潜在的很多用户可能会使用它,所以我想知道这里有什么样的正确模式?选择没有其他人可能使用它的时间?虽然没有万无一失的方法可以确定。
PROD也有同样的问题,尽管我们在设置时间内重新编译它。
答案 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
。
如果您获得0
,NOT 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
PACKAGE
,PACKAGE BODY
,TRIGGER
,PROCEDURE
甚至是TABLE
g
。
P.S。如果您使用gv_$sql_bind_capture
或gv_$session
而不是v_$sql_bind_capture
或v_$session
使用RAC
作为数据字典视图的前缀,则可以将它们用于lagom-internal-meta-project-kafka
数据库中。
答案 1 :(得分:0)
不,在查看该视图时,您可以alter view viewname compile
。 (这可能与版本有关 - 在Oracle 12.1中检查过。)
我不确定这里的用例是什么。为什么视图需要编译?如果它无效,那么用户如何查询它?