Oracle материализовал настройку представлений - PullRequest
1 голос
/ 20 марта 2009

Я пытаюсь выполнить настройку материализованных представлений в моем приложении. Я решил выполнить:

 dbms_advisor.tune_mview()

и записал следующий код в SQL_Worksheet Oracle SQL Developer:

variable mvtask varchar2(100); 
variable mvddl varchar2(4000);

execute :mvtask := 'MV_FOO_BAR';
execute select query into :mvddl from user_mviews where view_name = 'MV_FOO_BAR';

execute dbms_advisor.tune_mview(:mvtask, :mvddl);

select * from user_tune_mview;

Очевидно, материализованное представление уже создано (с refresh fast on commmit, который, однако, работает недопустимо медленно). Советник сообщает о следующей ошибке:

Error report:
ORA-13600: error encountered in Advisor
QSM-03112: Invalid CREATE MATERIALIZED VIEW statement
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.PRVT_ACCESS_ADVISOR", line 202
ORA-06512: at "SYS.PRVT_TUNE_MVIEW", line 1026
ORA-06512: at "SYS.DBMS_ADVISOR", line 754
ORA-06512: at line 1
13600. 00000 -  "error encountered in Advisor\n%s"
*Cause:    An error occurred in the Advisor.
           This message will be followed by a second message giving
           more details about the nature of the error.
*Action:   See the Advisor documentation
           for an explanation of the second error message.

Но больше ничего не сообщается, никаких следов второго сообщения об ошибке. Кто-нибудь знает в чем здесь проблема? Я тем более удивлен, поскольку MV уже существует и работает в базе данных, хотя и медленно.

В соответствующей заметке кто-нибудь знает, как ввести многострочную строку в SQL Developer. Когда я пытаюсь что-то вроде:

execute :mvddl :='create materialized view MV_FOO_BAR
build immediate
refresh fast on commit
...
';

Разработчик SQL задыхается на первой строке. Конкатенация строк пришла мне в голову, но у меня есть несколько MV по 100-150 строк, и я бы не хотел делать это вручную для каждой из них.

1 Ответ

6 голосов
/ 20 марта 2009

(1) Когда текст ошибки 13600 ссылается на «второе сообщение об ошибке», это означает следующую ошибку в стеке - в данном случае QSM-03112.

(2) Причина ошибки, как мне кажется, заключается в том, что вторым параметром в вызове TUNE_MVIEW является полный текст оператора CREATE MATERIALIZED VIEW, но вы передаете только текст запроса.

(3) Для многострочной проблемы, я ожидаю, что она будет работать, если вы используете явный анонимный блок PL / SQL вместо «execute», например ::

BEGIN
  :mvddl := 'create materialized view MV_FOO_BAR
             build immediate
             refresh fast on commit
             ...
            ';
END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...