문제

최근에 Oracle에서 구체화 된 견해를 새로 고치는 DBMS_MVIEW.REFRESH (...)에게 호출하는 것은 암시적인 커밋을 가지고 있음을 알았습니다.

"왜냐하면"이외의 아이디어는 왜이 행동이 암시적인 커밋을 가지고 있습니까?

도움이 되었습니까?

해결책

Oracle 버전 및/또는 DBMS_MVIEW를 제공하는 매개 변수에 따라 REFRESH는 자르기와 직접로드를 수행 할 수 있습니다. Truncate는 DDL 명령이며, 그러한 문제와 마찬가지로 암시 적 커밋입니다. 직접 부하에는 커밋이 필요하지 않습니다.

최신 버전의 Oracle을 사용하는 경우 10.2+가 Atomic_Refresh 매개 변수를 True로 설정할 수 있으며 표준 삭제 / 인서트를 사용하여 단일 트랜잭션 내에서 새로 고침됩니다. 이 방법은 꽤 느릴 수 있습니다.

다른 팁

Tom Kyte에 따르면 그 때문입니다 DDL 작업으로 새로 고침을 고려하기 위해 설계 시간에 결정을 내 렸습니다.. 모든 DDL 작업이 암시 적으로 커밋되므로 이에도 적용됩니다. 불행히도 그는 왜 그들이 DDL을 만들기로 선택했는지에 대한 결과적인 질문에 대답하지 않습니다.

작업은 자율 트랜잭션에서 DBMS_MVIEW.REFRESH를 호출하는 것입니다 (Pragma Autonomous_Transaction을 사용하여 PL/SQL 절차를 작성).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top