• English

데이터베이스 트랜잭션 예제

자율 트랜잭션은 주 트랜잭션인 다른 트랜잭션에서 호출할 수 있는 독립 트랜잭션입니다. 호출 트랜잭션을 일시 중단하고 SQL 작업을 수행하고 자율 트랜잭션에서 커밋 또는 실행 취소한 다음 호출 트랜잭션을 다시 시작할 수 있습니다. 문 수준 롤백을 일으키는 오류의 예는 중복 기본 키를 삽입하려는 시도입니다. 교착 상태에 관련된 단일 SQL 문은 동일한 데이터에 대한 경쟁으로 인해 문 수준 롤백을 유발할 수도 있습니다. 그러나 구문 오류와 같은 SQL 문 구문 구문 구문 구문 에서 발견된 오류는 아직 실행되지 않으므로 문 수준 롤백을 일으키지 않습니다. 트랜잭션 보호는 응용 프로그램이 트랜잭션 idempotence를 제공하는 데 사용할 수 있는 API로, 트랜잭션이 커밋되고 완료되었는지 여부를 나타내는 보장된 커밋 결과를 보존하는 데이터베이스의 기능입니다. 오라클 데이터베이스는 JDBC 씬, OCI, OCCI 및 ODP.Net 위한 API를 제공합니다. Oracle Database는 ROLLBACK TO SAVEPOINT 문에 지정된 저장점을 유지하지만 이후의 모든 저장점은 손실됩니다. 리커버리(RECO) 백그라운드 프로세스는 미확정 분산 트랜잭션의 결과를 자동으로 해결합니다. 오류가 복구되고 통신이 다시 설정되면 각 로컬 Oracle 데이터베이스의 RECO 프로세스가 모든 관련 노드에서 의심할 여지 없는 분산 트랜잭션을 자동으로 커밋하거나 롤백합니다.

오라클 데이터베이스 관리자 가이드 2단계 커밋 메커니즘에 대해 알아보려면 트랜잭션의 개념을 설명하려면 뱅킹 데이터베이스를 고려하십시오. 커밋되지 않은 트랜잭션이 보유한 잠금을 기다리는 큐에 대기 중인 사용자는 작업을 진행할 수 있습니다. 표 10-1에서는 sal_update 트랜잭션에 저장점이 없으므로 저장점이 지워지지 않았습니다. 트랜잭션은 하나 이상의 데이터베이스 액세스 작업을 수반하는 DBMS에서 처리하는 논리적 단위입니다. 간단히 말해서 데이터베이스 트랜잭션은 모든 기업의 실제 이벤트를 나타냅니다. 세션 2는 Greene 행을 업데이트하려고 시도하지만 세션 1에 이 행에 잠금이 있기 때문에 잠금을 획득하지 못합니다. 세션 2에서 트랜잭션이 시작되지 않았습니다. 2단계 커밋 메커니즘은 분산 트랜잭션을 발행하는 사용자에게 투명합니다. 실제로 사용자는 트랜잭션이 분산되어 있다는 것을 알 필요가 없습니다. 트랜잭션의 끝을 나타내는 COMMIT 문은 자동으로 2단계 커밋 메커니즘을 트리거합니다. 데이터베이스 응용 프로그램의 본문 내에 분산 트랜잭션을 포함하기 위해 코딩 또는 복잡한 문 구문이 필요하지 않습니다.

표 10-1의 세션에서는 트랜잭션 제어의 기본 개념을 보여 줍니다. 커밋은 현재 트랜잭션을 종료하고 트랜잭션에서 수행되는 모든 변경 내용을 영구적으로 만듭니다. 표 10-1에서 두 번째 트랜잭션은 sal_update2로 시작하여 명시적 COMMIT 문으로 끝납니다. 이제 두 UPDATE 명령문에서 발생한 변경 사항이 영구적으로 변경되었습니다. 세션 1이 트랜잭션을 시작합니다. 세션은 반다 행(TX)에 단독 잠금을 배치하고 테이블에는 전용 테이블 잠금(SX)이 배치됩니다. “데이터베이스 관리자를 위한 도구” 및 “데이터베이스 개발자를 위한 도구” 다시 시도하기 위해 합의된 보존 기간 동안 논리적 트랜잭션 ID를 유지하면 데이터베이스 작업의 괄호가 놓인 집합에 대해 ACID 속성을 제공하는 DBMS입니다. 시작 커밋)을 시작합니다.