我有一个复杂的跨模式查询,我想在 Oracle 19c 中将其创建为物化视图(尽管该数据库已从 Oracle 的众多历史版本中移植过来)。这包括将一个子查询连接到三个总共模式的 5 个附加表,然后联合到针对 3 个不同模式的查询的另一个副本。创建视图的帐户具有 DBA 和 CONNECT 角色,并已被授予GLOBAL QUERY REWRITE
、UNLIMITED TABLESPACE
、CREATE PROCEDURE
、CREATE MATERIALIZED VIEW
和CREATE TABLE
系统权限。它还对查询中的所有表具有显式 SELECT 权限。
我可以毫无问题地运行查询本身。但是,当我为物化视图添加设置时:
CREATE MATERIALIZED VIEW <account_schema>.<materialized_view_name>
BUILD IMMEDIATE
REFRESH FORCE
ON COMMIT
AS
<SELECT...>
我得到 ORA-01031,或“权限不足”。我错过了什么?有没有办法查询更详细的遗漏报告?它指向查询中的特定位置(最后一个连接中的表),但我看不出它与其他表之间有任何区别。
问题似乎是 DDL 的“ON COMMIT”部分。从文档中:
“要创建提交时刷新物化视图(REFRESH ON COMMIT 子句),除了上述权限外,您还必须对您不拥有的任何主表具有 ON COMMIT REFRESH 对象权限,或者您必须具有 ON COMMIT刷新系统权限。”
因此,要么选择“ON DEMAND”,要么为每个源表授予额外的权限。