Oracle - Materialized View는 전체 새로 고침 중에도 액세스할 수 있습니다.이것은 어떻게 작동합니까?
한 애플리케이션에서는 하루에 세 번씩 업데이트되고 업데이트하는 데 7시간이 소요되는 대규모 Materialized View가 있습니다. (이상적인 것은 아닙니다.)이는 사용자와 세션이 이 구체화된 보기를 새로 고치는 동안 액세스할 수 없다고 생각했기 때문에 당황스러웠습니다. 하지만 분명히 액세스할 수 있습니다!(새로 고침 유형은 완전히 새로 고침)
전체 새로 고침 중에 기존 데이터 세트가 삭제되고 쿼리가 다시 실행되는 것으로 알고 있습니다.이것이 사실이라면 구체화된 보기를 새로 고치는 동안 사용자/다른 세션은 어떻게 구체화된 보기에 액세스할 수 있습니까?
완전한 새로 고침이 발생할 수 있는 두 가지 다른 방법이 있습니다. 원자 새로 고침과 원자가 아닌 새로 고침입니다.원자적 새로 고침은 구체화된 보기의 모든 행을 삭제하는 DELETE를 실행한 다음 INSERT를 수행하여 새 데이터를 삽입합니다.이는 모두 단일 트랜잭션 내에서 수행되므로 Oracle의 표준 다중 버전 읽기 일관성 아키텍처를 사용하여 새로 고침이 완료될 때까지 다른 세션에 이전 데이터를 표시할 수 있습니다.원자가 아닌 새로 고침에서는 Oracle이 구체화된 보기에서 잘라낸 다음 직접 경로 INSERT를 수행하여 새 데이터를 삽입합니다.이 방법이 훨씬 효율적이지만 TRUNKATE가 DDL이기 때문에 새로 고침 중에는 이전 데이터가 다른 세션에 표시되지 않습니다.
언급URL : https://stackoverflow.com/questions/6999958/oracle-materialized-view-still-accessible-during-complete-refresh-how-does-th
'programing' 카테고리의 다른 글
| MySQL - 각 행의 연결된 테이블에서 COUNT()가 표시된 열을 가져옵니다. (0) | 2023.07.27 |
|---|---|
| 아이폰의 화면 키보드 높이는 얼마입니까? (0) | 2023.07.27 |
| DAO 및 서비스 계층(JPA/하이버네이트 + 스프링) (0) | 2023.07.27 |
| 도커 내에서 MariaDB를 실행할 수 없습니다. (0) | 2023.07.22 |
| Oracle SQL Developer 3.1.07 listagg를 사용한 문자 사이의 추가 공백 (0) | 2023.07.22 |