[英]Oracle materialized view tuning
我正在嘗試在我的應用程序中執行物化視圖的調整。 我開始執行:
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 開發人員在第一行窒息。 字符串連接閃過我的腦海,但我有幾個 100-150 行的 MV,我討厭為每一個手動做。
(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;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.