1

내 애플리케이션에서 구체화 된보기 조정을 수행하려고합니다. 어느 그러나 refresh fast on commmit와 (오라클 구체화보기 조정

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; 

은 물론, 구체화 뷰가 이미 생성 : 나는 실행에 착수 :

dbms_advisor.tune_mview() 

절차 및 SQL_Worksheet 오라클의 SQL 개발자에 다음 코드를 작성 용납 할 수없이 느리게 실행됩니다.) 관리자가 다음 오류를보고합니다.

 
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가 몇 개 있는데, 나는 그것들 각각에 대해 수동으로하는 것이 싫어.

답변

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; 
/
+0

+1 좋은 간결하게 대답. – DCookie

+0

Еxactly 내가 필요한 것. 감사. – javashlook