我在Oracle 10g
上执行了DBMS_Snapshot.refresh
,它工作正常,但是当我在Oracle 11g
上执行相同的操作时,它给出了以下错误
DBMS_SNAPSHOT.refresh('Table1','F');
BEGIN DBMS_SNAPSHOT.refresh('Table1','F'); END;
.
*
ERROR at line 1:
ORA-23401: materialized view "localuser"."Table1" does not
exist
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2558
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2771
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2740
ORA-06512: at line 1
任何帮助非常感谢
问候。
南迪什
好的,这可能有很多原因。
-
您还没有在 11g 中重新创建 MV。 您无法刷新 MV 来创建它。
-
您没有为 MV 所在的架构重新创建同义词(公共或私有)。
-
您没有在另一个架构中重新创建对 MV 的授权,因此请创建它们。
您可以尝试DBMS_MVIEW而不是DBMS_SNAPSHOT。
exec dbms_mview.refresh('Table1');
错误消息表明它正在以区分大小写的方式查找"Table1"
。尝试传入'TABLE1'
。
我的情况没有什么不同。DBMS_MVIEW。刷新('ABC.XYZ') 调用从预言机存储过程 (SCHEMA1.PROC1)。我以其他用户 (用户 A) 的身份调用 SP。我已经将所有权限授予了用户,但没有等待。显然,oracle似乎并不关心用户拥有的权限,它寻找包所有者的权限。这很奇怪,与我到处准备的相反。但它确实有效
不起作用:
向用户 A 授予更改任何实例化视图的权限;
授予 ABC 上的选择。用户 A 的 MLOG$_XYZ;
工作:
授予更改任何实例化视图以SCHEMA1;
授予 ABC 上的选择。MLOG$_XYZ 给用户 A, SCHEMA1;