MView 엠뷰 준비, 생성, 자동리플래시, Materialized View Auto Manual Refresh
1. 준비 사항
- 유저에게 권한 부여
: grant create materialized view to 유저명
- Rewrite 기능 Enabled
: ALTER SYSTEM SET QUERY_REWRITE_ENABLED='TRUE';
- 옵티마이저 모드 변경
: ALTER SESSION SET OPTIMIZER_MODE='FIRST_ROWS';
- Job Processes 설정
: C:\oracle\product\10.2.0\db_1\srvm\admin 안에 있는 init.ora 파일을 열어서
: job_queue_processes = 10
# job_queue_processes = 10 #datawarehouse
# job_queue_interval = 10
job_queue_keep_connections = true
2. 생성
- Create 소스 테이블 ( F_SALES, D_ITEM)
: CREATE TABLE F_SALES (
YMD_CD NUMBER not null,
ITEM_CD VARCHAR2(20) not null,
EMP_NO NUMBER not null,
SALE_AMT NUMBER,
SALE_QTY NUMBER);
: CREATE TABLE D_ITEM (
ITEM_CD VARCHAR2(20),
ITEM_NM VARCHAR2(20));
- 테스트 값 입력
: insert into f_sales values (20080509, 'ORA0001', 10, 15000000, 1); commit;
: insert into d_item values ('ORA0001', 'BIEE_101332'); commit;
- Mview 로그 만들기 ( Auto Refresh를 위해 필요)
: create materialized view log on F_SALES with rowid including new values;
- Mview 생성
: CREATE MATERIALIZED VIEW MV_SALES
USING INDEX
REFRESH FORCE
--START WITH sysdate
--NEXT SYSDATE+(1/24/60)
WITH ROWID
ENABLE QUERY REWRITE
AS
SELECT A.YMD_CD YMD_CD, A.EMP_NO EMP_NO, B.ITEM_NM, SUM(A.SALE_AMT) SALE_AMT, SUM(A.SALE_QTY) SALE_QTY
FROM F_SALES A, D_ITEM B
WHERE A.ITEM_CD=B.ITEM_CD
GROUP BY A.YMD_CD, A.EMP_NO, B.ITEM_NM
- Mview 수정 ( 오라클 버그로 인해 위 주석처리 한 부분을 수정해줘야 함, 1분에 한번 리플래시되도록)
: alter MATERIALIZED VIEW MV_SALES1 REFRESH FORCE START WITH sysdate NEXT SYSDATE+(1/24/60) WITH ROWID;
3. 검증
- Job이 제대로 등록되었는지 확인( LAST_DATE 와 NEXT_DATE 를 확인한다.)
: select * from user_jobs;
- Mview가 제대로 생성되었는지 확인
: SELECT * FROM MV_SALES;
- Mivew Refresh 기능 확인을 위해 INSERT
: insert into f_sales values (20080509, 'ORA0001', 8, 15000000, 1); commit;
- Refresh 확인
: Job에 나와있는 Next_date 이후 시간에 SELECT * FROM MV_SALES;
4. 참고
- Mview Log 확인하기
: select * from dba_mview_logs
- 수동으로 Refresh 하기
: execute dbms_refresh.refresh('"BKMIN"."MV_SALES"');
작성 : 본인
도움 : Prodba 카페의 '용돌이' 님
출처 : http://cafe.naver.com/prodba |
에서 질문하고 답변 얻고 해서 정리했어요~