programing

Oracle: DDL 및 트랜잭션 롤백

batch 2023. 6. 15. 21:43
반응형

Oracle: DDL 및 트랜잭션 롤백

Oracle DDL(생성/변경)이 MS SQL(2005년부터 시작)에서와 같이 트랜잭션이 가능합니까?

DDL은 Oracle에서 트랜잭션이 아닙니다.11.2 문서에서:

Oracle Database는 모든 DDL 문 앞과 뒤에 현재 트랜잭션을 암묵적으로 커밋합니다.

아니요. Oracle DDL 문 자체는 트랜잭션이 아니며, 각 DDL 문 앞과 뒤에 암묵적인 커밋이 포함되어 있습니다.

해당 문에 포함된 모든 데이터 수정은 해당 트랜잭션 내에서 수행됩니다.예를 들어, 특정 대체 가능한 문은 테이블에서 트리거를 발생시킬 수 있으며, 이는 다른 DML을 실행할 수 있습니다.이 모든 작업은 DDL 문이 포함된 트랜잭션에서 실행되며, DDL 문이 실패하거나 취소되면 모든 작업이 롤백됩니다.

그러나 여러 DDL 문을 롤백하는 명시적 트랜잭션을 시작할 수는 없습니다.

또한 다른 세션에 수정 중인 개체 또는 해당 종속성 중 하나에 대해 열린 트랜잭션이 있는 경우 대체 가능한 문과 같은 일부 문이 실패할 수 있습니다.ddl_lock_timeout을 설정하여 Oracle이 개체를 사용할 수 있을 때까지 기다리는 시간을 지정할 수 있습니다.

DDL 문 유형에 대한 요약과 잠금 및 트랜잭션에 대한 동작에 대한 정보는 DDL 문을 참조하십시오.

Oracle Database는 모든 DDL 문 앞과 뒤에 현재 트랜잭션을 암묵적으로 커밋합니다.

방금 이 문제를 발견했기 때문에 더 많은 조사가 필요하지만 Oracle의 스키마 생성 권한 부여를 통해 적어도 하나의 트랜잭션에서 여러 DDL 문을 번들할 수 있으므로 여러 커밋을 피할 수 있으며 DDL 문 중 하나가 실패할 경우 롤백과 같은 부작용이 발생하지 않습니다.

생성 스키마가 저장 지점을 시작한 경우와 같이 롤백이 래핑된 DDL 문에만 적용되는지, 아니면 이전 DML 문과 함께 외부 트랜잭션에 적용되는지는 불분명합니다.

그러나 마지막으로 래핑된 DDL 문이 성공적으로 완료된 후에도 커밋을 피할 수 없습니다.

언급URL : https://stackoverflow.com/questions/4711447/oracle-ddl-and-transaction-rollback

반응형