DBMS_Snapshot.обновление не работает в 11g, ошибка материализованного представления

#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:

Хорошо, для этого может быть много причин.

  1. Вы еще не воссоздали MV в 11g. Вы не можете обновить MV для его создания.

  2. Вы не воссоздали синоним (общедоступный или частный) для схемы, в которой находится MV.

  3. Вы не воссоздали гранты для 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;