我正在尝试在我的应用程序中执行物化视图的调整。我开始执行:
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,我讨厌为每一个手动做。