我在DBMS_Snapshot.refresh
上执行了Oracle 10g
它工作正常,但是当我在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
任何帮助非常感谢
问候。
Nandish
答案 0 :(得分:2)
好的,可能有很多原因。
你没有在11g中重新创建MV。你无法刷新MV来创建它。
您没有为MV所在的架构重新创建同义词(公共或私有)。
您没有在另一个架构中重新创建MV授权,因此请创建它们。
您可以尝试DBMS_MVIEW而不是DBMS_SNAPSHOT。
exec dbms_mview.refresh('Table1');
答案 1 :(得分:0)
错误消息表明它正在以区分大小写的方式查找"Table1"
。请尝试传入'TABLE1'
。
答案 2 :(得分:0)
我的情况略有不同。 DBMS_MVIEW.REFRESH('ABC.XYZ')调用从oracle存储过程(SCHEMA1.PROC1)发生。我将SP称为不同的用户(UserA)。我已经向用户授予了所有权限,但没有给出任何意见。显然,oracle似乎并不关心用户拥有的权限,它会查找包所有者的权限..这很奇怪,与我到处准备的相反......但它确实有效
没有用:
授予对UserA的任何物质化视图;
将ABC.MLOG $ _XYZ上的选择权交给UserA;
曾为:
授予对SCHEMA1的任何物质化视图;
将ABC.MLOG $ _XYZ选择为UserA,SCHEMA1;