[Oracle] SQL문법 9. TCL(COMMIT, ROLLBACK)

작성일     업데이트:

카테고리:

태그:

TCL (TRANSACTION CONTROL LANGUAGE)

트랜잭션 관련 문장으로 DML(데이터 조작어)에 의해 변경된 내용을 관리한다
데이터의 일관성을 유지하면서 안정적으로 데이터를 복구할 때 사용하는 쿼리문이기도 하다


Transaction

  • 데이터베이스의 논리적인 작업단위로 데이터 처리의 한 단위이다
  • 하나의 트랜잭션은 All-Or-Nothing 방식으로 처리한다
    => 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위함임
  • 데이터의 변경사항(DML)들을 하나의 트랜잭션으로 묶어서 처리한다
    => COMMIT(확정,승인)하기 전까지의 변경사항들을 모두 묶어서 하나의 트랜잭션으로 담아둔다
  • 트랜잭션의 대상이 되는 SQL : INSERT, UPDATE, DELETE (DML)
  • 트랜잭션 제어 명령어 종류
    • COMMIT : 변경사항을 DB에 반영
    • ROLLBACK : 변경사항을 반영하지 않고 되돌림
    • SAVEPOINT : 현재시점 임시저장
    • ROLLBACK TO 포인트명 : SAVE포인트로 저장해둔 시점으로 롤백


[ COMMIT ]

COMMIT;
  • 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영하겠다는 것을 의미한다
  • 저장되지 않은 모든 데이터를 데이터베이스에 저장하고 현재의 트랜잭션을 종료하라는 명령어이다
  • 실제 DB에 변경사항들을 반영시킨 후 트랜잭션은 비워진다
    => 변경사항들이 확정되었기 때문
    => 하나의 트랜잭션 과정이 끝났다고 할 수 있다
  • DDL(CREATE, DROP, ALTER, RENAME, TRUNCATE)은 AutoCommit으로 별도의 COMMIT; 명령어 없이 즉각적으로 변경사항이 반영된다
    => 이때 기존에 있던 트랜잭션에 있던 모든 변경사항들을 무조건 실제 DB에 반영(COMMIT) 후 DDL이 수행된다
    => 따라서 DDL 수행 전 변경사항이 있었다면 정확히 확인 후 DDL을 실행해야 함
  • 정상적인 종료시에도 COMMIT작업을 수행하게 된다
    => ex) exit 종료


[ ROLLBACK ]

ROLLBACK;
  • 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영하지 않겠다는 것을 의미한다
  • 저장되지 않은 모든 데이터 변경사항(DML)을 취소하고 현재의 트랜잭션을 끝내게 된다
  • 트랜잭션에 담겨있던 변경사항 모두를 다 삭제(무효화)한 후 마지막 COMMIT시점으로 돌아가게 된다
  • 비정상적인 종료 시 ROLLBACK 작업을 수행하게 된다
    => ex) 우측상단 X버튼 클릭 시 등


[ SAVEPOINT , ROLLBACK TO ]

SAVEPOINT 저장점 ;
ROLLBACK TO 저장점 ;

-- 예시
SAVEPOINT SP1;
ROLLBACK TO SP1;
  • SAVEPOINT로 현재 시점을 임시 저장하여 ROLLBACK TO로 해당 시점까지 변경사항들을 되돌린다
    => 전체 변경사항을 삭제하는 것이 아니라 SAVEPOINT로 저장해둔 시점까지만 삭제하게 된다
  • 다만 이미 작업취소한 내용을 다시 작업취소할 수는 없으므로 한번 ROLLBACK TO로 ROLLBACK을 진행한 SAVEPOINT를 다시 ROLLBACK TO 할 수는 없다

댓글남기기