Я пытаюсь выполнить настройку материализованных представлений в моем приложении. Я решил выполнить:
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 строк, и я бы не хотел делать это вручную для каждой из них.