itsource

구체화된 뷰 쿼리 수정

mycopycode 2023. 6. 26. 21:20
반응형

구체화된 뷰 쿼리 수정

Materialized 뷰 쿼리를 수정해야 합니다.삭제하거나 다시 만들지 않고 동일한 작업을 수행할 수 있습니다.

아니요, 구체화된 보기의 쿼리를 삭제하지 않고 변경할 수 없습니다.

CREATE MATERIZED VIEW 구문은 해당 기능을 지원하지 않습니다.

ALTER Materialized 뷰는 다음 중 하나 이상의 방법으로 기존의 Materialized 뷰를 수정하는 데 사용됩니다.

  • 스토리지 특성 변경
  • 새로 고침 방법, 모드 또는 시간을 변경하려면 다음과 같이 하십시오.
  • 다른 유형의 구체화된 뷰가 되도록 구조 변경
  • 쿼리 다시 쓰기를 사용하거나 사용하지 않도록 설정하려면 다음과 같이 하십시오.

다음은 Oracle 12c Release 1 설명서를 참조하십시오.

  • Materialized View 구문 생성: http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_6002.htm#i2145767

  • ALTER Materialized View 구문: http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_2002.htm#SQLRF00808

MVIEW의 존재 여부가 확실하지 않은 경우(이것이 CREATE 또는 REPLACE가 정말로 적합한 이유), 저는 사용합니다.

BEGIN
    EXECUTE IMMEDIATE 'DROP MATERIALIZED VIEW name_of_mview';
    EXCEPTION
        WHEN OTHERS THEN
            IF SQLCODE = -12003 THEN
                dbms_output.put_line('MVIEW does not exist, which was somewhat expected');
            ELSE
                RAISE;
            END IF;
END;
/

CREATE MATERIALIZED VIEW name_of_mview ... AS SELECT ...

mview는 그대로 둘 수 있습니다.미리 작성된 테이블을 사용하지 않았기 때문에 새 mview가 인스턴스화되는 동안 다운타임을 최소화하는 것이 문제라면 다음을 수행할 수 있습니다.

  1. 미리 작성된 테이블에 mview_1이라는 새 테이블 생성
  2. 생성된 후에는 이전 항목을 삭제할 수 있습니다.
  3. mview_1에서 *를 선택하여 뷰 mview 작성 또는 바꾸기

이제 재구축이 필요할 때마다 새로운 테이블/mview를 간단히 가리키면 되므로 다운타임이 거의 또는 전혀 없이 재구축할 수 있습니다.

이 기능은 최신 Oracle 버전의 새로운 기능일 수도 있지만 다음과 같이 잘 작동합니다.

DROP MATERIALIZED VIEW my_mview PRESERVE TABLE;

CREATE MATERIALIZED VIEW my_mview
ON PREBUILT TABLE ...

기존 MV를 새 MV에 대해 미리 작성된 테이블의 소스로 사용할 수 있습니다.

물론 쿼리에 대해 무엇을 하느냐에 따라 많은 것이 달라집니다.예를 들어 열을 추가하는 경우 새 값을 얻으려면 모든 항목을 새로 고쳐야 합니다.

PS. 기존 MV를 테이블로 빠르게 전환하는 방법은 파티션 교환이지만 gotchas를 주의하십시오.그런 다음 테이블을 조작하여 새 결과 세트와 일치시키고 조작된 테이블을 기반으로 새 MV를 생성합니다.

언급URL : https://stackoverflow.com/questions/4274681/modify-materialized-view-query

반응형