2017-10-31 13 views
0

는) 내가 MV에 어떻게 증분 업데이트에 두 관련된 질문이 내부적으로구체화 된보기에서 점진적 새로 고침은 어떻게 작동합니까?

1 일 내가보기 (MV) select * from employee, department where employee.id = department.id and name like '%Andy%'

을 구체화 구성하는 아래의 쿼리를 말해봐 내가 삽입하거나 어떤 항목 중 하나를 업데이트 할 말 직원 또는 부서 테이블에서 MV의 increment refresh을 삽입/업데이트 트랜잭션 의 비동기로 구성 할 수 있습니까? 아니면 동기 프로세스가 반드시 필요합니까?

2) 삽입 또는 업데이트하는 동안 oracle은 (트랜잭션 1 로그를 통해) 업데이트 된/삽입 된 행을 평가하고 MV 쿼리 조건을 적용하는지 확인하십시오. 그렇다면 행을 업데이트하거나 MV에 삽입 하시겠습니까?

답변

0

1) 나는 MV에 증분 새로 고침이 삽입/업데이트 트랜잭션의 비동기로 구성 할 수 있습니다, 내가 삽입 또는 직원이나 부서 테이블에있는 항목 중 하나를 업데이트 말 또는 동기 과정으로 필수입니다?

기본 테이블에서 변경 사항이 커지는 즉시 데이터를 구체화 된보기로 사용하려면 ON COMMIT 새로 고침 메소드를 사용할 수 있습니다.

또는 구체화 된보기에 점진적으로 변경 사항을 적용하여 새로 고치려면 FAST 새로 고침 방법을 사용할 수 있습니다. 비동기 적으로이 작업을 수행 할 수 있습니다.

2) 삽입 또는 업데이트 중에 oracle은 (트랜잭션 로그를 통해) 업데이트 된/삽입 된 각 행을 평가하고 MV 쿼리 조건을 적용하는지 확인하십시오. 그렇다면 행을 업데이트하거나 MV에 삽입 하시겠습니까?

어떤 종류의 새로 고침 방법을 사용하는지에 따라 다릅니다. FAST 또는 ON COMMIT 새로 고침 방법을 사용중인 경우 예를 선택하면 MV를 생성하는 데 사용 된 쿼리에 정의 된 기준을 충족시키는 변경 사항 만 MV에 적용됩니다.

0

빨리 새로 고치려면 MV 용으로 선택한 기본 테이블에 MATERIALIZED VIEW LOG을 만들어야합니다. 이러한 구체화 된 뷰 로그에서 Oracle은 갱신/삽입/삭제 된 행 정보를 저장합니다. 오라클은 사용자가 예상 한대로 REDO 로그를 사용하지 않습니다.

테이블에 기반한 모든 MView를 새로 고치면 (ON COMMIT 또는 수동 REFRESH로) 구체화 된 뷰 로그의 내용이 잘립니다.