2014년 5월 20일 화요일

[오라클자바커뮤니티교육]이번강좌에서는 ORACLE MVIEW에 대해 알아보자. 오라클과 같은 관계형 데이터 베이스에서 뷰(View)를 가상의 테이블이라고 한다. 뷰는 SQL문장 라인에 직접 기술하는 인라인뷰(inline view)와 create view로 만들어지는 뷰가 있는데 실제 데이터는 뷰의 원본 테이블에 존재하고 데이터의 논리적 결합 및 조합된 결과(통계정보)의 질의 형태만 저장해 둔 객체를 의미한다. MVIEW라고 불리는 물리뷰(구체화뷰)의 용도는 그룹함수 min, max, sum, avg등의 값을 미리 만들어 놓을때 유용하며 user_segments에서 확인가능하다. 오라클 8i이후 부터 새롭게 추가된 구체화 뷰 (MATERIALIZED VIEW) 는 기존 뷰와 비슷하지만 차이가 나는 부분은 실제 데이터를 자신이 가지고 있으며 원본 테이블에 INSERT, UPDATE, DELETE가 발생하면 새로운 데이터를 구체화된 뷰에 반영된다. [기본 문법] CREATE MATERIALIZED VIEW VIEW_NAME BUILD IMMEDIATE[DEFERRED] REFRESH [ FAST ] [ COMPLETE ] [ FORCE ] [ NEVER ] ENABLE QUERY REWRITE AS [SELECT문장]; 설명 (해석) BUILD IMMEDIATE : MView 생성과 동시에 데이터들도 생성되는 옵션. BUILD DEFERRED : MView 생성은 하지만, 그 안의 데이터는 추후에 생성하도록 하는 기능 입니다. MView 생성시 BUILD IMMEDIATE 대신 BUILD DEFERRED 옵션을 사용하면 조회되는 데이터가 없다. BUILD IMMEDIATE REFRESH : 구체화된 뷰가 생성되자마자 바로 실행 가능한 상태로 된다. REFRESH 절은 아랫 부분에 정의된 AS절에서 사용된 셀렉트문 내의 원본 테이블의 데이터가 변경되면 구체화된 뷰를 언제 변경할 것인지에 대한 일정을 결정한다. ON COMMIT 은 기초 테이블에 Commit 이 일어날 때 Refresh 가 일어나는 방안이며, 이는 1 개의 테이블에 COUNT(*), SUM(*)과 같은 집합 함수를 사용하거나, MView에 조인만이 있는 경우, Group By 절에 사용된 컬럼에 대해 COUNT(col) 함수가 기술된 경우만 사용이 가능 합니다. ON DEMAND는 사용자가 DBMS_MVIEW 패키지 (REFRESH, REFRESH_ALL_MVIEWS, REFRESH_DEPENDENT) 를 실행 한 경우 Refresh 되는 경우 or start_withm next구에 의해 REFRESH된다. -- MVIEW이름이 MV_EMP라고 할 때, C는 COMPLETE REFRESH를 의미한다. 예) execute dbms_mview.refresh( list =>'MV_EMP', method =>'C'); [FAST] : 원본 테이블에 변경된 데이터만 구체화 뷰에 갱신한다. FAST REFRESH가 동작하기 위해서는 뷰의 마스터 테이블이 materialized view log 가 있어야 한다. 예) CREATE MATERIALIZED VIEW LOG ON emp WITH PRIMARY KEY, ROWID INCLUDING NEW VALUES; [COMPLETE] : 원본테이블이 변경되면 전부 갱신한다. [FORCE] : FAST와 동일한 기능을 한다. [NEVER] : 원본테이블이 갱신되어도 뷰에 반영하지 않는다. ENABLE QUERY REWRITE 절은 일반 USER가 작성한 SQL 문이 구체화 된 뷰를 통해 데이터를 검색하는 것이 더 빨리 데이터를 찾을 수 있다고 분석되면 사용자의 SQL문을 구체화뷰를 통해 검색하게 하는 기능이다. 마지막으로 일반 View나 Snapshot처럼 AS 구문 뒤에 필요한 컬럼과 조건들을 기술 하면 된다 MVIEW 를 만들려먼 먼저 DBA로 부터 권한을 받아야 한다. 뷰 생성 권한 받기 SQL>CONNECT / AS SYSDBA SQL>GRANT CREATE MATERIALIZED VIEW TO SCOTT; //scott사용자에게 mview만드는 권한을 준다. SQL>GRANT ALTER ANY MATERIALIZED VIEW TO scott; SQL>GRANT QUERY REWRITE TO scott; [예] MView를 생성하고 테스트 하기 위해서는, sysdba에서 Query Rewrite권한과 CREATE MATERIALIZED VIEW 권한을 MView를 생성하는 유저에게 부여해야 합니다. -- sysdba 접속 SQL> conn / as sysdba 연결되었습니다. SQL> GRANT QUERY REWRITE TO SCOTT; 권한이 부여되었습니다. SQL> GRANT CREATE MATERIALIZED VIEW TO SCOTT; 권한이 부여되었습니다. SQL> conn scott/tiger 연결되었습니다. -- MATERIALIZED VIEW 생성 SQL> CREATE MATERIALIZED VIEW dept_sal BUILD IMMEDIATE REFRESH COMPLETE ON DEMAND ENABLE QUERY REWRITE AS SELECT SUM(a.sal), a.deptno FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY a.deptno; 구체화된 뷰가 생성되었습니다. SQL> SELECT * FROM DEPT_SAL; SUM(A.SAL) DEPTNO ---------- ---------- 8850 10 13875 20 9334 30 [출처] 오라클자바커뮤니티 - http://www.oraclejavacommunity.co.kr/bbs/board.php?bo_table=LecOracle&wr_id=220 오라클자바커뮤니티 오프라인 교육센터, 개발자 전문교육, 개인80%환급 www.oraclejavacommunity.com 평일주간(9:30~18:20) 개강 (5/26)SQL초보에서실전전문가까지 (5/26)안드로이드개발자과정 (5/26)C#4.0,ADO.NET,Network 프로그래밍 (5/26)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (5/27)JAVA,ORACLE 실무개발자과정 (5/28)[교육전취업확정]Spring,MyBatis,XPlatform실무프로젝트과정 (5/30)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING 평일야간(19:00~21:50) 개강 (5/22)안드로이드개발자과정 (5/22)C#,ASP.NET마스터 (5/23)SQL초보에서실전전문가까지 (5/26)웹퍼블리싱 마스터 (5/28)Spring3.X, MyBatis, Hibernate실무과정 (5/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 주말(10:00~17:50) 개강 (5/24)Spring3.X, MyBatis, Hibernate실무과정 (5/24)C#,ASP.NET마스터 (5/24)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/24)안드로이드개발자과정 (5/24)SQL초보에서실전전문가까지 (5/24)실무예제로 배워보는 jQuery(개발자/디자이너를위한) 주말저녁(18:30~22:20) 개강 (5/24)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

[오라클자바커뮤니티교육]이번강좌에서는 ORACLE MVIEW에 대해 알아보자. 오라클과 같은 관계형 데이터 베이스에서 뷰(View)를 가상의 테이블이라고 한다.  

뷰는 SQL문장 라인에 직접 기술하는 인라인뷰(inline view)와 create view로 만들어지는 뷰가 있는데
실제 데이터는 뷰의 원본 테이블에 존재하고 데이터의 논리적 결합 및 조합된 결과(통계정보)의 질의 형태만 저장해 둔 객체를 의미한다.

MVIEW라고 불리는 물리뷰(구체화뷰)의 용도는 그룹함수 min, max, sum, avg등의 값을 미리 만들어 놓을때 유용하며 user_segments에서 확인가능하다.
 
오라클 8i이후 부터 새롭게 추가된 구체화 뷰 (MATERIALIZED VIEW) 는 기존 뷰와 비슷하지만 차이가 나는 부분은 실제 데이터를 자신이 가지고 있으며 원본 테이블에 INSERT, UPDATE, DELETE가 발생하면 새로운 데이터를 구체화된 뷰에 반영된다. 

[기본 문법]
CREATE MATERIALIZED VIEW VIEW_NAME
BUILD IMMEDIATE[DEFERRED] REFRESH [ FAST ]
                                          [ COMPLETE ]
                                          [ FORCE ]
                                          [ NEVER ]
ENABLE QUERY REWRITE
AS
[SELECT문장];



설명 (해석)
BUILD IMMEDIATE : MView 생성과 동시에 데이터들도 생성되는 옵션.

BUILD DEFERRED : MView 생성은 하지만, 그 안의 데이터는 추후에 생성하도록 하는 기능 입니다.
                 MView 생성시 BUILD IMMEDIATE 대신 BUILD DEFERRED 옵션을 사용하면 조회되는 데이터가 없다. 
    
BUILD IMMEDIATE REFRESH : 구체화된 뷰가 생성되자마자 바로 실행 가능한 상태로 된다.

REFRESH 절은 아랫 부분에 정의된 AS절에서 사용된 셀렉트문 내의 원본 테이블의 데이터가 변경되면 구체화된 뷰를 언제 변경할 것인지에 대한 일정을 결정한다.

ON COMMIT 은 기초 테이블에 Commit 이 일어날 때 Refresh 가 일어나는 방안이며, 
    이는 1 개의 테이블에 COUNT(*), SUM(*)과 같은 집합 함수를 사용하거나, MView에 조인만이 
    있는 경우,  Group By 절에 사용된 컬럼에 대해 COUNT(col) 함수가 기술된 경우만 
    사용이 가능 합니다.
 
ON DEMAND는 사용자가 DBMS_MVIEW 패키지 (REFRESH, REFRESH_ALL_MVIEWS,
    REFRESH_DEPENDENT) 를 실행 한 경우 Refresh 되는 경우 or start_withm next구에 의해 REFRESH된다. 

-- MVIEW이름이 MV_EMP라고 할 때, C는 COMPLETE REFRESH를 의미한다.
예) execute dbms_mview.refresh( list =>'MV_EMP', method =>'C');

[FAST] : 원본 테이블에 변경된 데이터만 구체화 뷰에 갱신한다. FAST REFRESH가 동작하기 위해서는 뷰의 마스터 테이블이 materialized view log 가 있어야 한다.

예)     CREATE MATERIALIZED VIEW LOG ON emp  WITH PRIMARY KEY, ROWID INCLUDING NEW VALUES;

[COMPLETE] : 원본테이블이 변경되면 전부 갱신한다.
[FORCE] : FAST와 동일한 기능을 한다.
[NEVER] : 원본테이블이 갱신되어도 뷰에 반영하지 않는다.
 
ENABLE QUERY REWRITE 절은 일반 USER가 작성한 SQL 문이 구체화 된 뷰를 통해 데이터를 검색하는 것이 더 빨리 데이터를 찾을 수 있다고 분석되면 사용자의 SQL문을 구체화뷰를 통해 검색하게 하는 기능이다.

마지막으로 일반 View나 Snapshot처럼 AS 구문 뒤에 필요한 컬럼과 조건들을 기술 하면 된다
 
MVIEW 를 만들려먼 먼저 DBA로 부터 권한을 받아야 한다.
 
뷰 생성 권한 받기
SQL>CONNECT / AS SYSDBA
SQL>GRANT CREATE MATERIALIZED VIEW TO SCOTT;  //scott사용자에게 mview만드는 권한을 준다.
SQL>GRANT ALTER ANY MATERIALIZED VIEW TO scott;
SQL>GRANT QUERY REWRITE TO scott;
 
[예]

MView를 생성하고 테스트 하기 위해서는,  sysdba에서 Query Rewrite권한과  
CREATE MATERIALIZED VIEW 권한을 MView를 생성하는 유저에게 부여해야 합니다.


-- sysdba 접속 
SQL> conn / as sysdba
연결되었습니다.
 
 

SQL> GRANT QUERY REWRITE TO SCOTT;
권한이 부여되었습니다.
 
 
SQL> GRANT CREATE MATERIALIZED VIEW TO SCOTT;
권한이 부여되었습니다.

SQL> conn scott/tiger
연결되었습니다.
 
 
-- MATERIALIZED VIEW 생성
SQL> CREATE MATERIALIZED VIEW dept_sal
     BUILD IMMEDIATE 
     REFRESH
     COMPLETE       
     ON DEMAND      
     ENABLE QUERY REWRITE
     AS
     SELECT SUM(a.sal), a.deptno
     FROM emp a, dept b
     WHERE a.deptno = b.deptno
     GROUP BY a.deptno;
구체화된 뷰가 생성되었습니다.
 

SQL> SELECT * FROM DEPT_SAL;
 
SUM(A.SAL)     DEPTNO
---------- ----------
      8850         10
     13875         20
      9334         30

댓글 없음:

댓글 쓰기