#oracle #oracle11g #ora-06512
#Oracle #oracle11g #ora-06512
Вопрос:
Я выполнил 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
Комментарии:
1. Ошибка выглядит довольно самоописывающейся. Что именно неясно в сообщении об ошибке?
Ответ №1:
Хорошо, для этого может быть много причин.
-
Вы еще не воссоздали MV в 11g. Вы не можете обновить MV для его создания.
-
Вы не воссоздали синоним (общедоступный или частный) для схемы, в которой находится MV.
-
Вы не воссоздали гранты для MV в другой схеме, поэтому создайте их.
Вы могли бы попробовать DBMS_MVIEW вместо DBMS_SNAPSHOT.
exec dbms_mview.refresh('Table1');
Ответ №2:
Сообщение об ошибке предполагает, что выполняется поиск "Table1"
с учетом регистра. Вместо этого попробуйте передать 'TABLE1'
.
Ответ №3:
Мой случай немного отличался. Вызов DBMS_MVIEW.REFRESH(‘ABC.XYZ’) выполняется из хранимой процедуры oracle (SCHEMA1.PROC1). Я вызывал SP от имени другого пользователя (UserA). Я предоставил все разрешения пользователю, но без awail. По-видимому, Oracle, похоже, не заботится о разрешениях, которые есть у пользователя, он ищет разрешения для владельца пакета.. это очень странно и противоречит тому, что я готовил везде .. но это сработало
не сработало:
ПРЕДОСТАВЬТЕ пользователю ВОЗМОЖНОСТЬ ИЗМЕНЯТЬ ЛЮБОЕ МАТЕРИАЛИЗОВАННОЕ ПРЕДСТАВЛЕНИЕ;
ПРЕДОСТАВЬТЕ пользователю ВЫБОР В ABC.MLOG $_XYZ;
Сработало:
РАЗРЕШИТЕ ИЗМЕНЯТЬ ЛЮБОЕ МАТЕРИАЛИЗОВАННОЕ ПРЕДСТАВЛЕНИЕ В SCHEMA1;
ПРЕДОСТАВЬТЕ пользователю ВЫБОР В ABC.MLOG $_XYZ, СХЕМА 1;