Oracle物化视图调优

时间:2009-03-20 15:07:40

标签: oracle performance oracle-sqldeveloper materialized-views

我正在尝试在我的应用程序中调整物化视图。我开始执行:

 dbms_advisor.tune_mview()

过程,并将以下代码写入Oracle SQL Developer的SQL_Worksheet:

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 Developer在第一行窒息。字符串串联在我脑海中浮现,但我有几个100到150行的MV,我讨厌为每一行手动操作。

1 个答案:

答案 0 :(得分:6)

(1)当错误13600的文本引用“第二错误消息”时,表示堆栈中的下一个错误 - 在本例中为QSM-03112。

(2)我认为错误的原因是调用TUNE_MVIEW的第二个参数是CREATE MATERIALIZED VIEW语句的全文,但是你只传递查询文本。

(3)对于多行问题,我希望如果你使用显式的PL / SQL匿名块而不是“执行”,它将会起作用,例如:

BEGIN
  :mvddl := 'create materialized view MV_FOO_BAR
             build immediate
             refresh fast on commit
             ...
            ';
END;
/
相关问题