2011-06-14 2 views
4

다음과 같은 구체화 된보기가 있습니다. -Oracle - DBMS_MVIEW.REFRESH를 사용하여 'REFRESH FORCE ON DEMAND'뷰를 새로 고칠 때 어떤 일이 발생합니까?

CREATE MATERIALIZED VIEW TESTRESULT 
ON PREBUILT TABLE WITH REDUCED PRECISION 
REFRESH FORCE ON DEMAND 
WITH PRIMARY KEY 
AS 
SELECT... 
FROM... 
WHERE... 

이 구체화 된보기에는 보조적으로 지원되는보기 로그가 없습니다. 위의 절에서 볼 수 있듯이이 MV에는 "ON DEMAND"가 지정되어 있으며 Oracle 설명서에 따르면

"[ON DEMAND]는 에서 요청시 구체화 된 보기가 새로 고쳐질 것임을 나타냅니다 세 DBMS_MVIEW 새로 고침 절차 중. "

DBMS_MVIEW.REFRESH ('TESTRESULT')를 호출 할 때 발생하는 것은 무엇입니까? 수동으로 각 레코드가 업데이트되었는지 확인하고 있습니까?

Oracle 버전 : 10g

답변

6

10g에. 즉, 구체화 된보기의 데이터가 삭제되고 기본 쿼리가 다시 실행되며 결과가 구체화 된보기로로드됩니다. 당신은 ATOMIC_REFRESH 매개 변수에 대한 FALSE의 값을 전달하여 새로 고침보다 효율적으로 할 수 있습니다 즉

dbms_mview.refresh('TESTRESULT', atomic_refresh => false); 
는 구체화 된 뷰의 원인이됩니다

가 잘릴 수 쿼리를 다시 실행하고, 결과가 구체화에 삽입 직접 경로 삽입을 통해보기. 이는 원자 새로 고침보다 효율적이지만 새로 고침 중에 구체화 된보기는 비어 있습니다.

+0

+1 @Justin .. 또한 'NOLOGGING'을 사용하여 MVIEW를 만든 경우 어떻게됩니까? 내가 작성한 MVIEW는 UNDOTBS가 작아서 오류가 계속 발생합니다. 'ATOMIC_REFRESH'가 도움이됩니까? – Guru

+0

@ 전문가 - 올바르게 이해하면 ORA-01555 오류가 발생합니다. 그렇습니까? 이는 쿼리하는 테이블이 변경되고 새로 고침이 시작된 시점의 데이터 일관성있는 뷰를 생성 할 수 없다는 것을 의미합니다. 일반적으로 이는 'UNDO_RETENTION' 매개 변수 및/또는 UNDO 테이블 공간이 너무 작아서 증가해야한다는 것을 의미합니다. 잠재적으로,'ATOMIC_REFRESH'가 달성 할 수있는 새로 고침을 수행하는 데 필요한 시간을 줄일 수 있습니다. –

+0

내 사무실 PC에서 멀리 떨어져 있기 때문에 정확한 ORA 오류가 발생하기까지 기다려야합니다. 검색 할 때 Tom Kyte 역시 01555에 대해 언급했습니다. 그러나 여기에 제가하는 일이 있습니다. 큰 테이블을 기반으로 MVIEW를 만듭니다. 그것은 약 40-60 분 걸립니다. MVIEW 크기는 35-40GB입니다. DBMS_MVIEW로 새로 고침 (완료)하면 2-3 시간 동안 스크립트가 실행되고 MVIEW REFRESH PATH 크기가 문제가되어 오류가 발생합니다. – Guru

관련 문제