Restaurante La Strada

오라클 트랜잭션 예제

Posted on

커밋이 발행되지 않았거나 커밋이 실행되었지만 실행되지 않은 경우 기내 트랜잭션이 롤백되고 올바른 상태의 세션을 사용하여 다시 제출되어야 합니다. Oracle 트랜잭션 관리 모델에 대한 .NET 프레임워크 데이터 공급자가 올바르게 수행되도록 하려면 데이터베이스에서 제공하는 것과 같은 다른 트랜잭션 관리 모델을 사용하지 마십시오. 원자 문(예: 명령문 실행 시 호출되는 트리거)의 모든 부작용은 원자 문으로 간주됩니다. 원자문일부로 생성된 모든 작업이 성공하거나 없음을 수행합니다. 트랜잭션은 하나 이상의 SQL 문을 포함하는 논리적인 원자성 작업 단위입니다. 오라클 데이터베이스 관리자 가이드 미의심 거래 관리 방법 알아보기 은행 거래 다음 그림입니다. 첫 번째 문은 저축 계좌 3209에서 $500를 뺍니다. 두 번째 문은 계좌 3208을 확인하는 데 $500를 추가합니다. 세 번째 문은 저널 테이블에 전송 레코드를 삽입합니다.

마지막 문은 트랜잭션을 커밋합니다. 전체 트랜잭션을 롤백할 때 저장점을 참조하지 않고 Oracle Database는 자동 커밋 변수를 0으로 설정하여 자동 커밋 모드를 비활성화한 후 트랜잭션 안전 테이블(예: InnoDB의 테이블)을 변경합니다. BDB 또는 NDBCLUSTER)는 즉시 영구적으로 만들어지지 않습니다. 변경 내용을 무시하려면 COMMIT를 사용하여 변경 내용을 디스크 또는 ROLLBACK에 저장해야 합니다. COMMIT는 현재 트랜잭션을 커밋하여 세션이 트랜잭션을 대기할 때마다 변경 내용을 영구적으로 수행하며 savepoint에 대한 롤백은 행 잠금을 해제하지 않습니다. 잠금을 얻을 수 없는 경우 트랜잭션이 중단되지 않도록 하려면 UPDATE를 위해 사용합니다. 업데이트 또는 DELETE 문을 발행하기 전에 NOWAIT. (롤백된 저장점 전에 얻은 잠금을 말합니다.

저장점 이후에 얻은 행 잠금은 savepoint 이후에 실행된 문이 완전히 롤백되었기 때문에 해제됩니다. 기본 동작은 LGWR이 온라인 다시 실행 로그에 동기적으로 다시 작업을 작성하고 트랜잭션이 사용자에게 커밋을 반환하기 전에 버퍼링된 다시 실행이 디스크에 있을 때까지 기다리는 것입니다. 그러나 트랜잭션 커밋 대기 시간이 낮은 경우 응용 프로그램 개발자는 트랜잭션이 디스크에 있을 때까지 기다릴 필요가 없고 COMMIT 호출에서 즉시 반환할 수 있도록 다시 실행이 비동기적으로 작성되도록 지정할 수 있습니다. 간단하고 기억에 남는 텍스트 문자열을 사용하여 트랜잭션의 이름을 지정할 수 있습니다. 이 이름은 트랜잭션에 대한 내용을 상기시켜 줍니다. 트랜잭션 이름은 분산 트랜잭션에 대한 커밋 주석을 대체하며, 교착 상태는 자율 트랜잭션과 호출 트랜잭션 간에 가능합니다. 오라클은 이러한 교착 상태를 감지하고 오류를 반환합니다. 응용 프로그램 개발자는 교착 상태 상황을 방지 할 책임이 있습니다.