0

我有一个架构 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?

谢谢!

4

1 回答 1

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;
于 2012-08-15T20:57:36.000 回答