본문 바로가기

Programming/DataBase

(SQL) TCL(Transaction Control Language) 이란 무엇일까?

728x90
반응형



TCL(Transaction Control Language)이란?

 ▷ DCL(Data Control Language)에서 트랜잭션을 제어하는 명령인

 COMMITROLLBACK만을 따로 분리해서 TCL이라고 표현하고 있습니다.


◈COMMIT 연산

  ▷ COMMIT 연산은 트랜잭션 처리가 정상적으로 종료되어 트랜잭션이 수행한 변경 내용을 데이터베이스에 반영하는 연산입니다.

  ▷ 내용을 변경한 트랜잭션이 완료되면 그 트랜잭션에 의해 데이터베이스는 새롭게 일관된 상태로 변경되며, 이 상태는 시스템 오류가 발생하더라도 취소되지 않습니다.


(COMMIT 연산 실행)

※ 지금까지 해온 작업들을 데이터베이스에 반영합니다.



◈ROLLBACK 연산

  ▷ ROLLBACK 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성이 깨졌을 때, 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 되돌리는 연산입니다.

   ▷ ROLLBACK 연산 시 해당 트랜잭션은 받았던 자원과 잠금(LOCK)을 모두 반환하고, 재시작(Restart)되든지 폐기됩니다.

(ROLLBACK 연산 실행)

※ 마지막 COMMIT 이후의 작업으로 돌아갑니다.

   만약 COMMIT를 하지 않았다면 모든 작업이 사라집니다.

(COMMIT를 하지 않고, ROLLBACK 연산 실행)

 테이블의 데이터를 삭제한 후 다시 테이블의 데이터를 출력하면 데이터가 사라져 있습니다.

하지만, ROLLBACK를 하게 된다면 데이터 삭제 후 COMMIT를 삭제하지 않았기에, 데이터가 다시 복구가 됩니다.


(COMMIT를 한 뒤, ROLLBACK 연산 실행)

※ 테이블의 데이터를 삭제한 후 테이블의 데이터를 출력하게 되면 데이터가 사라져 있습니다.

그 후 COMMIT연산을 한 뒤, ROLLBACK연산을 하고, 다시 테이블 데이터를 출력하게 되면, 데이터는 사라진 채로 출력됩니다. 그 이유는 COMMIT연산에 의해 데이터가 DB에 반영되었기 때문입니다.


◈SAVEPOINT

   ▷ SAVEPOINT는 현재의 트랜잭션을 작게 분할하는 명령어 입니다.

   ▷ 저장된 SAVEPOINT는 ROLLBACK TO SAVEPOINT문을 사용하여 지정한 곳까지 ROLLBACK 할 수 있습니다.

   ▷ 여러개의 SQL문을 수반하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 SAVEPOINT를 지정할 수 있습니다.

   ▷ 이 SAVEPOINT는 차우 ROLLBACK과 함께 사용하며, 현재 트랜잭션 내의 특정 SAVEPOINT까지 ROLLBACK 할 수 있습니다.


(SAVEPOINT 만들기)

※ SAVEPOINT 포인터명;


 테이블에 첫번째 값을 넣은 후 SAVEPOINT를 만듭니다. 그후 두번째, 세번째 값을 넣고 테이블의 데이터를 출력하게 되면, 세개의 값이 출력됩니다. 그후 C1이라는 SAVEPOINT로 ROLLBACK연산을 수행하게 된다면, 마지막 COMMIT이 실행된 그 이후로 돌아가게 됩니다. 그 후 테이블의 데이터를 출력하게 되면 첫번째 값만 출력되게 됩니다.


※SAVEPOINT 유의사항

1. SAVEPOINT 후 COMMIT연산을 하게 된다면, COMMIT 연산 이전에 만든 SAVEPOINT들은 모두 사라지게 됩니다.

2. SAVEPOINT는 여러개 생성할 수 있습니다.

반응형