최근 오라클에서 구체화 된 뷰를 새로 고치는 dbms_mview.refresh (...) 호출은 암시 적 커밋을가집니다.DBMS_MVIEW.REFRESH에 암시 적 커밋이있는 이유는 무엇입니까?
"이유가 있습니다"이외의 아이디어 -이 작업에 암시 적 커밋이있는 이유는 무엇입니까?
최근 오라클에서 구체화 된 뷰를 새로 고치는 dbms_mview.refresh (...) 호출은 암시 적 커밋을가집니다.DBMS_MVIEW.REFRESH에 암시 적 커밋이있는 이유는 무엇입니까?
"이유가 있습니다"이외의 아이디어 -이 작업에 암시 적 커밋이있는 이유는 무엇입니까?
Oracle 버전 및/또는 dbms_mview.refresh에 제공하는 매개 변수에 따라 TRUNCATE 다음에 직접로드가 수행 될 수 있습니다. TRUNCATE는 DDL 명령이며 암시 적 커밋을 발생시킵니다. 직접로드에는 커밋이 필요하지 않습니다.
오라클의 최신 버전을 사용하고 있다면 10.2+라고 생각하면 atomic_refresh 매개 변수를 TRUE로 설정할 수 있으며 표준 DELETE/INSERT를 사용하여 단일 트랜잭션 내에서 새로 고칩니다. 이 방법은 상당히 느려질 수 있습니다.
atomic_refresh가 true이지만 TRUNCATE/DELETE 동작에 대해 올바른 경우에도 암시 적 커밋이 수행됩니다. –
설명해 주셔서 감사합니다. – David
예 - 암시 적 커밋은 새로 고침 메커니즘에 관계없이 동작을 일관되게 만든다고 가정합니다. –
톰 키테에 따르면 a decision was made at design time to consider refreshing to be a DDL operation입니다. 모든 DDL 작업은 암시 적으로 커밋하므로이 작업도 암시 적으로 커밋됩니다. 불행히도 그는 DDL을 선택하는 이유에 대한 질문에 대답하지 않습니다.
Tom은 훌륭합니다. 그러나 그는 "그것이 그렇기 때문에"답변을 버리는 경향이 있습니다. –
예, 그는 누구보다 대답 할 수 없다는 질문에 대답합니다. –
작업 arround는 autonomous 트랜잭션 (pragma autonomous_transaction으로 PL/SQL 프로 시저 작성)에서 dbms_mview.refresh를 호출하는 것입니다.
이 경우가 아니라 새로 고침 된 뷰 자체가 망가진 경우 새로 고침을 롤백 할 수 있기를 원했습니다. –
사용중인 Oracle 버전은 무엇입니까? – David
나는 Oracle 10g (10.2)를 사용하고 있습니다. –