2009-05-06 5 views

답변

1

Oracle 버전 및/또는 dbms_mview.refresh에 제공하는 매개 변수에 따라 TRUNCATE 다음에 직접로드가 수행 될 수 있습니다. TRUNCATE는 DDL 명령이며 암시 적 커밋을 발생시킵니다. 직접로드에는 커밋이 필요하지 않습니다.

오라클의 최신 버전을 사용하고 있다면 10.2+라고 생각하면 atomic_refresh 매개 변수를 TRUE로 설정할 수 있으며 표준 DELETE/INSERT를 사용하여 단일 트랜잭션 내에서 새로 고칩니다. 이 방법은 상당히 느려질 수 있습니다.

+1

atomic_refresh가 true이지만 TRUNCATE/DELETE 동작에 대해 올바른 경우에도 암시 적 커밋이 수행됩니다. –

+0

설명해 주셔서 감사합니다. – David

+0

예 - 암시 적 커밋은 새로 고침 메커니즘에 관계없이 동작을 일관되게 만든다고 가정합니다. –

4

톰 키테에 따르면 a decision was made at design time to consider refreshing to be a DDL operation입니다. 모든 DDL 작업은 암시 적으로 커밋하므로이 작업도 암시 적으로 커밋됩니다. 불행히도 그는 DDL을 선택하는 이유에 대한 질문에 대답하지 않습니다.

+0

Tom은 훌륭합니다. 그러나 그는 "그것이 그렇기 때문에"답변을 버리는 경향이 있습니다. –

+0

예, 그는 누구보다 대답 할 수 없다는 질문에 대답합니다. –

0

작업 arround는 autonomous 트랜잭션 (pragma autonomous_transaction으로 PL/SQL 프로 시저 작성)에서 dbms_mview.refresh를 호출하는 것입니다.

+0

이 경우가 아니라 새로 고침 된 뷰 자체가 망가진 경우 새로 고침을 롤백 할 수 있기를 원했습니다. –