从Oracle中的刷新组中检出快照

时间:2012-08-15 20:14:47

标签: oracle views refresh privileges materialized-views

我有一个带有架构A的Oracle数据库,它具有DBA_ *视图的选择权限。

我还有一个没有这些权限的模式B,但它有很多物化视图。

在架构A中,有三个刷新组,每个刷新组都具有来自架构B的一些物化视图。

我想检查刷新组中是否有快照,但是我想将此检查连接为B。

我正在使用以下查询在架构A中执行此检查:

SELECT OWNER, NAME FROM DBA_SNAPSHOTS WHERE OWNER = 'B'
MINUS
SELECT OWNER, NAME FROM DBA_REFRESH_CHILDREN WHERE RNAME IN ('REFRESH_G1','REFRESH_G2','REFRESH_G3');

问题:

  • B没有DBA_ *视图的权限(并且它不能拥有)
  • 如果我更改了ALL_ *视图的DBA_ *视图,则B无法看到刷新组(并且我无法将任何具体化视图更改为B)

所以:

  • 还有另一种方法可以在B中执行此检查吗?
  • 或者是否有其他方法让B看到刷新组?
  • 或者有没有办法使用ALL_ *视图“冻结”查询结果,例如B会将查询结果看作A?

谢谢!

1 个答案:

答案 0 :(得分:0)

A

CREATE OR REPLACE VIEW V_REFRESH_SNAPSHOT AS
SELECT OWNER, NAME FROM DBA_SNAPSHOTS WHERE OWNER = 'B'
MINUS
SELECT OWNER, NAME FROM DBA_REFRESH_CHILDREN WHERE RNAME IN ('REFRESH_G1','REFRESH_G2','REFRESH_G3');

GRANT SELECT ON A.V_REFRESH_SNAPSHOT TO B;

来自B

SELECT * FROM A.V_REFRESH_SNAPSHOT;