2-3-2. TCL

박은서's avatar
Mar 02, 2026
2-3-2. TCL
💡
TCL (트랜잭션 제어어 : Transaction Control Language)

1. COMMIT

1️⃣ 트랜잭션의 기초 개념

1) 트랜잭션

  • 데이터베이스 내에서 실행되는 하나의 논리적인 작업 단위
  • 여러 개의 연산을 포함할 수 있음
  • 데이터베이스의 응용프로그램들은 수많은 트랜잭션의 집합체

2) 트랜잭션 명령어

  • COMMIT 명령어
    • 데이터를 데이터베이스에 저장
  • ROLLBACK 명령어
    • 데이터의 상태를 이전으로 되돌림
  • SAVEPOINT 명령어
    • 트랜잭션의 일부만 취소

3) 트랜잭션 ACID 속성

  • 원자성(Atomicity)
    • 데이터베이스의 일관성을 유지하는 핵심 메커니즘
    • 모든 연산이 성공적으로 완료되거나 아무것도 실행되지 않은 상태 유지
  • 일관성(Consistency)
    • 트랜잭션은 데이터베이스의 일관성을 유지해야 함
  • 고립성(Isolation)
    • 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행되어야 함
  • 지속성(Durability)
    • 성공적으로 수행된 트랜잭션의 결과는 시스템 오류가 발생해도 유지해야 함

2️⃣ COMMIT

1) COMMIT

  • COMMIT을 실행 → 트랜잭션 종료 / 해당 트랜잭션에서 이루어진 모든 변경 사항이 데이터베이스에 영구적으로 저장됨
  • 다른 트랜잭션이나 사용자는 COMMIT이 완료된 데이터만 볼 수 있음
  • COMMIT 이후에는 해당 트랜잭션에 대한 ROLLBACK 불가능
  • COMMIT 이후 데이터 복구가 매우 어렵지만, 몇 가지 방법을 통해 일부 복구 작업 가능

2) 오토커밋(Auto-commit)

  • 일부 데이터베이스 시스템에서는 SQL 문이 실행될 때마다 자동으로 COMMIT을 수행하는 자동 커밋 모드 사용 가능
  • 오토커밋 활성화된 경우, 각 SQL 문이 실행될 때마다 트랜잭션 자동 종료

3) COMMIT 예

// 1. EMP_MNG 테이블의 YONGMOON, YONGMMON2 삭제 DELETE FROM EMP WHERE ENAME = 'YONGMOON' OR ENAME = 'YONGMOON2'; // 2. 새로운 직원을 EMP 테이블에 추가 INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (7935, 'JAMESBOND', 'ANALYST', 7566, TO_DATE('2023-08-19', 'YYYY-MM-DD'), 3500, NULL, 20); // 3. 특정 직원의 급여를 10% 인상 (EMPNO가 7935'JAMESBOND') UPDATE EMP SET SAL = SAL * 1.1 WHERE EMPNO = 7935; // 4. 특정 직원의 부서 번호를 30번으로 변경 (EMPNO가 7902인 FORD) UPDATE EMP SET DEPTNO = 30 WHERE EMPNO = 7902; // 5. 모든 변경 사항을 확정 COMMIT;

2. ROLLBACK

1️⃣ ROLLBACK의 기초 개념

1) ROLLBACK

  • 데이터베이스 트랜잭션에서 이루어진 모든 변경 사항을 취소하고, 트랜잭션이 시작된 시점으로 되돌리는 명령어
  • 트랜잭션 중간에 사용될 수 있으며, COMMIT 이전의 모든 작업 되돌림
  • 특정 지점까지 되돌릴 수 있음
    • SAVEPOINT 설정하고, ROLLBACK TO SAVEPOINT 사용하여 트랜잭션 일부분만 취소 가능

2) ROLLBACK 예

// 1. 특정 직원의 급여를 40% 인상 (EMPNO가 7935'JAMESBOND') UPDATE EMP SET SAL = SAL * 1.4 WHERE EMPNO = 7935; // 2. 특정 직원의 부서 번호를 30번으로 변경 (EMPNO가 7935'JAMESBOND') UPDATE EMP SET DEPTNO = 30 WHERE EMPNO = 7935; // 3. 모든 변경 사항을 취소 ROLLBACK;

3. SAVEPOINT

1️⃣ SAVEPOINT의 기초 개념

1) SAVEPOINT

  • 트랜잭션 내에서 트정 지점을 설정하여 그 지점까지의 작업을 안전하게 저장해두고, 이후에 문제가 발생하면 해당 지점으로 롤백할 수 있도록 하는 기능
  • 트랜잭션을 여러 단계로 나누어 관리할 수 있어, 필요한 경우 트랜잭션 전체를 취소하지 않고 특정 시점 이후의 작업만 취소할 수 있음
  • ROLLBACK TO savepoint_name 구문
    • 지정된 SAVEPOINT 이후에 수행된 모든 작업을 취소
    • SQVEPOINT 이전의 작업은 취소되지 않고 그대로 유지
  • 트랜잭션 내에서 여러 개의 SAVEPOINT 설정 가능
  • COMMIT 실행하면 트랜잭션 내의 모든 작업이 확정되며, 모든 SAVEPOINT는 삭제됨
  • ROLLBACK 실행하면 트랜잭션 전체 취소되며, 모든 SAVEPOINT는 삭제됨

2) SAVEPOINT 예

// 트랜잭션 시작 BEGIN; // 1. 첫 번째 INSERT INSERT INTO EMP (EMPNO, ENAME, JOB, SAL, DEPTNO) VALUES (8001, 'AAAAA', 'CLERK', 1500, 10); // 2. 첫 번째 SAVEPOINT 설정 SAVEPOINT sp1; // 3. 두 번째 INSERT INSERT INTO EMP (EMPNO, ENAME, JOB, SAL, DEPTNO) VALUES (8002, 'BBBBB', 'MANAGER', 2500, 20); // 4. 두 번째 SAVEPOINT 설정 SAVEPOINT sp2; // 5. 세 번째 INSERT INSERT INTO EMP (EMPNO, ENAME, JOB, SAL, DEPTNO) VALUES (8003, 'CCCCC', 'ANALYST', 3000, 30); // 6. 오류 발생으로 인해 두 번째 SAVEPOINT로 롤백 ROLLBACK TO sp2; // 7. COMMIT 실행으로 나머지 트랜잭션 확정 COMMIT;
 
Share article