[오라클 구체화뷰, 물리뷰]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
번호 | 제목 | 글쓴이 | 날짜 | 조회 | |
기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1574 | |||
[채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1118 | |||
53 | [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… | 03-15 | 874 | ||
52 | [주말주간]C#, ASP.NET마스터 | 01-31 | 1057 | ||
51 | [평일,기업100%환급]SQL기초에서 Schema Object까지 | 01-31 | 736 | ||
50 | [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 | 01-31 | 753 | ||
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 | 01-19 | 1012 | ||
48 | [평일주간,평일야간,주말]안드로이드개발자과정 | 01-11 | 919 | ||
47 | [평일야간,주말주간]JAVA,Network&WEB&Framework | 01-03 | 1410 | ||
46 | 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/jQUERY개발… | 12-27 | 1574 | ||
45 | [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… | 12-19 | 1135 | ||
44 | 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) | 12-14 | 1152 | ||
43 | [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… | 12-11 | 1118 | ||
42 | [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 | 12-09 | 895 | ||
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1033 | ||
40 | [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… | 12-01 | 1325 | ||
39 | [평일야간,주말,주말야간]SQL기초에서실무까지(SQL기초,PLSQL,힌… | 12-01 | 799 |
댓글 없음:
댓글 쓰기