ROLLBACK 명령문

ROLLBACK문은 작업 단위(UOW) 또는 세이브포인트 내에서 작성된 데이터베이스 변경사항을 취소하는 데 사용됩니다.

호출

이 명령문은 애플리케이션 프로그램에 임베드되거나 동적 SQL문을 사용하여 실행할 수 있습니다. 이 명령문은 동적으로 준비할 수 있는 실행문입니다.

권한 부여

조치가 필요하지 않습니다.

구문

Read syntax diagramSkip visual syntax diagramROLLBACKWORK TO SAVEPOINTsavepoint-name

설명

ROLLBACK문이 실행되고 종료되며 새 작업 단위(UOW)가 시작되는 작업 단위입니다. 작업 단위가 취소되는 동안 데이터베이스에 작성된 모든 변경사항입니다.

그러나 다음 명령문은 트랜잭션 제어 하에 있지 않으며 다음 명령문으로 작성된 변경사항은 ROLLBACK문과 독립적입니다.

  • SET CONNECTION
  • SET ENCRYPTION PASSWORD
  • SET EVENT MONITOR STATE
  • SET PASSTHRU
    주: SET PASSTHRU문이 트랜잭션 제어 하에 있지 않더라도 명령문에 의해 시작된 passthru 세션은 트랜잭션 제어 하에 있습니다.
  • SET SERVER OPTION
  • SET 변수
  • 갱신 가능한 특수 레지스터에 대한 지정

시퀀스 및 ID 값의 생성은 트랜잭션 제어를 받지 않습니다. nextval-expression 또는 ROLLBACK문 실행과 독립적인 ID 컬럼이 있는 테이블로 행을 삽입하여 생성되고 소비되는 값입니다. 또한 ROLLBACK문 실행은 prevval-expression 또는 IDENTITY_VAL_LOCAL 함수에서 리턴된 값에는 적용되지 않습니다.

전역 변수의 값 수정은 트랜잭션 제어를 받지 않습니다. ROLLBACK문은 전역 변수로 지정된 수에 적용되지 않습니다.

TO SAVEPOINT
부분 롤백(ROLLBACK TO SAVEPOINT)이 수행되도록 지정합니다. 현재 세이브포인트 레벨에 활성 세이브포인트가 없는 경우(SAVEPOINT문 설명의 Rules 섹션 참조), 오류가 리턴됩니다(SQLSTATE 3B502). 성공적인 롤백 후, 세이브포인트는 계속 존재하지만 중첩된 세이브포인트가 릴리스되어 더 이상 존재하지 않습니다. 중첩된 세이브포인트는, 있는 경우, 롤백된 것으로 간주되며 롤백의 일부로 현재 세이브포인트로 릴리스됩니다. savepoint-name이 제공되지 않는 경우, 롤백은 현재 세이브포인트 레벨 내에 가장 최근 설정된 세이브포인트에 발생합니다.

이 절이 생략되면 ROLLBACK문은 전체 트랜잭션을 롤백합니다. 또한 트랜잭션 내 세이브포인트가 릴리스됩니다.

세이브포인트 이름
롤백 조작에 사용될 세이브포인트를 지정합니다. 지정된 savepoint-name은 'SYS'로 시작할 수 없습니다(SQLSTATE 42939). 성공적인 롤백 조작 후, 이름 지정된 세이브포인트가 계속 존재합니다. 세이브포인트 이름이 존재하지 않는 경우, 오류(SQLSTATE 3B001)가 리턴됩니다. 세이브포인트가 설정된 후 작성된 데이터 및 스키마 변경사항이 실행 취소됩니다.

참고

  • 작업 단위(UOW)의 ROLLBACK에서 보유된 모든 잠금이 해제됩니다. 열린 모든 커서가 닫힙니다. 모든 LOB 로케이터가 해제됩니다.
  • ROLLBACK문 실행은 특수 레지스터 값을 변경하는 SET문 또는 RELEASE문에 적용되지 않습니다.
  • 프로그램이 비정상적으로 종료되면, 작업 단위가 내재적으로 롤백됩니다.
  • 명령문 캐싱은 롤백 조작으로 적용됩니다.
  • ROLLBACK TO SAVEPOINT 결과로 나타나는 커서에 대한 영향은 세이브포인트 내 명령문에 따라 다릅니다.
    • 세이브포인트가 커서가 종속된 DDL을 포함하면, 커서는 유효하지 않은 것으로 표시됩니다. 이러한 커서를 사용하려고 하면 오류가 발생합니다(SQLSTATE 57007).
    • 그렇지 않은 경우,
      • 커서가 세이브포인트에서 참조되는 경우 커서는 열려 있으며 커서 위치는 결과 테이블의 다음 논리적 행 앞에 지정됩니다. (위치 지정된 UPDATE 또는 DELETE문이 실행되기 전에 페치가 수행되어야 합니다.)
      • 그렇지 않으면, 커서는 ROLLBACK TO SAVEPOINT에 적용되지 않습니다(열려 있으며 위치 지정됨).
  • KEEPDYNAMIC YES 옵션으로 바인드된 패키지에서 준비된 동적 SQL문은 ROLLBACK문 다음 SQL 컨텍스트에 있습니다. 작업 단위 내에 롤백된 DDL 조작의 결과로 명령문을 다시 내재적으로 준비할 수 있습니다.
  • KEEPDYNAMIC NO로 바인드된 패키지에서 준비된 비활성 동적 SQL문은 롤백 조작 후 SQL 컨텍스트에서 제거됩니다. 새 트랜잭션에서 명령문을 실행하기 전에 다시 준비되어 있어야 합니다.
  • 다음 동적 SQL문은 롤백 중 활성화될 수 있습니다.
    • ROLLBACK문
    • ROLLBACK문이 실행된 CALL문
  • ROLLBACK TO SAVEPOINT 조작은 세이브포인트 내 작성된 임시 테이블을 삭제합니다. 작성된 임시 테이블은 세이브포인트 내에서 수정되며 해당 테이블이 로그되어 있지 않은 것으로 정의되고, 테이블의 모든 행이 삭제됩니다.
  • ROLLBACK TO SAVEPOINT 조작은 세이브포인트 내 선언된 임시 테이블을 삭제합니다. 선언된 임시 테이블은 세이브포인트 내에서 수정되며 해당 테이블은 로그되어 있지 않은 것으로 정의되고, 테이블의 모든 행이 삭제됩니다.
  • ROLLBACK TO SAVEPOINT문 이후 모든 잠금이 유지됩니다.
  • 모든 LOB 로케이터가 다음 ROLLBACK TO SAVEPOINT 조작 후 유지됩니다.

마지막 커미트 시점 또는 롤백 이후 작성된 변경을 삭제합니다.
   ROLLBACK WORK