본문 바로가기
DB/Oracle

mview 자동갱신 / mview 생성시 옵션 / mview 생성 옵션

by Lohen 2016. 2. 4.
1. MVIEW 생성시 옵션
- BUILD IMMEDIATE : MView 생성과 동시에 데이터들도 생성되는 옵션
- BUILD DEFERRED : MView를 생성은 하지만, 그 안의 데이터는 추후에 생성하도록 하는 옵션
- REFRESH :  MView의 데이터를 새로고치는 시기와 방법를 결정 
  ㅇ시기: ON COMMIT 
          - 자동 갱신
  - 조건: 뷰에 입력되는 모든 필드가 PK로 잡혀야 함
         ON DEMAND
          - 수동 갱신
  - 조건: DBMS_MVIEW.REFRESH('MVIEW NAME'); 호출

 ㅇ 방법: COMPLETE
          - MView의 정의에 따라 MView의 데이터 전체가 Refresh
 FAST
  - 새로운 데이터가 삽입될 때마다 점진적으로 Refresh
 FORCE
  - 이 경우 먼저 Fast Refresh가 가능한지 점검 후 가능하면 이를 적용하고, 
                         아니면 Complete Refresh를 적용(디폴트)
 NEVER
  - 갱신하지 않는다.

  ㅇ 반복: START WITH SYSDATE  -- 최초 시작 시간
          NEXT SYSDATE + (1 / 24 ) -- 1시간 마다 반복
          NEXT SYSDATE + (1 / 1440 ) -- 1분 마다 반복
  - 조건: 뷰에 입력되는 모든 필드가 PK로 잡혀야 함.

  - 특정시간 마다 Refresh
  - 방법 조건에 따른 FEFRESH를 한다.

따라서,
자동갱신 및 반복갱신을 하기 위해선 뷰에 입력되는 모든 필드가 PK로 잡혀야 하고,
자동갱신을 하지 않고 수동갱신을 하기 위해서는 
JOB에 프로시저를 등록하여 일정주기로 호출하여 사용해야 한다.


2. SAMPLE CODE
  1) 자동반복

CREATE MATERIALIZED VIEW RF_TEMP_USER_DD
BUILD IMMEDIATE 
REFRESH FORCE
 ON COMMIT
 AS SELECT TV.DUID
      FROM TED_TV_test TV
          ,( 
             SELECT DUID AS USER_ID                  
               FROM TED_USER_CONTENT_test
           ) TT
     WHERE TV.DUID = TT.USER_ID
      
/*
    조건: TV.DUID 와 TT.USER_ID는 모두 PK로 잡았음.
*/


  2) 수동반복 / 1시간 마다 REFRESH

CREATE MATERIALIZED VIEW RF_TEMP_USER_
BUILD IMMEDIATE 
REFRESH FORCE
 ON DEMAND
 START WITH SYSDATE
 NEXT SYSDATE + (1/24) /* 1시간 마다 REFRESH */
 AS SELECT TV.DUID
      FROM TED_TV_test TV
          ,( 
             SELECT DUID AS USER_ID                  
               FROM TED_USER_CONTENT_test
           ) TT
     WHERE TV.DUID = TT.USER_ID
      
/*
    조건: TV.DUID 와 TT.USER_ID는 모두 PK로 잡았음.
*/



  3) 수동반복

CREATE MATERIALIZED VIEW RF_TEMP_USER_
BUILD IMMEDIATE 
REFRESH FORCE
 ON DEMAND
 AS SELECT TV.DUID
      FROM TED_TV_test TV
          ,( 
             SELECT DUID AS USER_ID                  
               FROM TED_USER_CONTENT_test
           ) TT
     WHERE TV.DUID = TT.USER_ID

      


반응형