簡體   English   中英

Oracle物化視圖調優

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM