【问题标题】:Oracle materialized view tuningOracle物化视图调优
【发布时间】:2010-10-14 13:43:53
【问题描述】:

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

 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,但是运行速度慢得令人无法接受)。顾问报告以下错误:

错误报告: ORA-13600: 在 Advisor 中遇到错误 QSM-03112:无效的 CREATE MATERIALIZED VIEW 语句 ORA-06512: 在“SYS.DBMS_SYS_ERROR”,第 86 行 ORA-06512:在“SYS.PRVT_ACCESS_ADVISOR”,第 202 行 ORA-06512:在“SYS.PRVT_TUNE_MVIEW”,第 1026 行 ORA-06512:在“SYS.DBMS_ADVISOR”,第 754 行 ORA-06512: 在第 1 行 13600. 00000 - “顾问遇到错误\n%s” *原因:顾问中发生错误。 此消息之后将有第二条消息给出 有关错误性质的更多详细信息。 *行动:请参阅顾问文档 有关第二条错误消息的说明。

但是,没有更多的报告,没有第二条错误消息的踪迹。有谁知道这里有什么问题?我更加惊讶,因为 MV 已经存在并且可以在数据库中运行,尽管速度很慢。

在相关说明中,有谁知道如何在 SQL Developer 中输入多行字符串。当我尝试类似:

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

SQL Developer 在第一行就窒息了。字符串连接闪过我的脑海,但我有几个 100-150 行的 MV,我讨厌为每一个手动做。

【问题讨论】:

    标签: oracle performance oracle-sqldeveloper materialized-views


    【解决方案1】:

    (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;
    /
    

    【讨论】:

    • 正是我需要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2012-07-17
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多