본문 바로가기
Database

오라클 COMMIT과 ROLLBACK을 활용한 트랜잭션 관리

by 굿센스굿 2024. 12. 3.
반응형


데이터베이스 관리 시스템(DBMS)에서 트랜잭션 관리는 데이터의 무결성과 일관성을 보장하는 핵심 기능입니다. 오라클 DB를 포함한 대부분의 DBMS에서 COMMIT ROLLBACK은 트랜잭션 관리를 위한 주요 명령어로 사용됩니다. 이번 글에서는 트랜잭션의 개념, COMMIT과 ROLLBACK의 차이점, 사용법, 그리고 실무 적용 방법을 상세히 알아보겠습니다.


1. 트랜잭션이란?

트랜잭션(Transaction)은 하나의 논리적인 작업 단위를 말합니다.
예를 들어, 은행에서 계좌 이체는 다음 작업이 하나의 트랜잭션으로 처리되어야 합니다.

  1. A 계좌에서 돈을 차감.
  2. B 계좌에 돈을 추가.

이 작업 중 하나라도 실패하면 모든 작업을 취소해야 데이터의 무결성이 보장됩니다. 이를 위해 트랜잭션 관리가 필요합니다.


2. COMMIT과 ROLLBACK의 개념

2.1 COMMIT

  • 트랜잭션의 작업을 확정하는 명령어입니다.
  • COMMIT을 실행하면 트랜잭션 내의 모든 변경 사항이 데이터베이스에 영구적으로 저장됩니다.
  • COMMIT 이후에는 변경 사항을 되돌릴 수 없습니다.

주요 특징

  • 트랜잭션이 성공적으로 완료되었음을 알림.
  • 변경 내용이 다른 사용자에게 즉시 반영됨.

2.2 ROLLBACK

  • 트랜잭션의 작업을 취소하는 명령어입니다.
  • ROLLBACK을 실행하면 트랜잭션 내의 모든 변경 사항이 이전 상태로 복구됩니다.

주요 특징

  • 트랜잭션 중 오류가 발생하거나 작업을 취소해야 할 때 사용.
  • 데이터의 일관성을 유지하기 위해 중요.

3. 트랜잭션 관리 예제

3.1 COMMIT 사용 예제

시나리오: 직원의 급여를 10% 인상

BEGIN;

UPDATE EMPLOYEES
SET SALARY = SALARY * 1.1
WHERE EMPLOYEE_ID = 101;

COMMIT;
  • 설명:
    101번 직원의 급여를 10% 인상한 후 COMMIT으로 변경 내용을 데이터베이스에 확정합니다.
    결과:
    데이터가 영구적으로 저장되며, 다른 사용자도 변경된 내용을 조회할 수 있습니다.

3.2 ROLLBACK 사용 예제

시나리오: 잘못된 급여 인상 작업 취소

BEGIN;

UPDATE EMPLOYEES
SET SALARY = SALARY * 1.5
WHERE EMPLOYEE_ID = 102;

ROLLBACK;
  • 설명:
    102번 직원의 급여를 실수로 50% 인상했다면, ROLLBACK으로 변경 사항을 취소합니다.
    결과:
    데이터는 작업 이전 상태로 복구됩니다.

3.3 COMMIT과 ROLLBACK의 결합 예제

시나리오: 계좌 이체 트랜잭션

BEGIN;

UPDATE ACCOUNTS
SET BALANCE = BALANCE - 500
WHERE ACCOUNT_ID = 'A123';

UPDATE ACCOUNTS
SET BALANCE = BALANCE + 500
WHERE ACCOUNT_ID = 'B456';

IF SQL%ROWCOUNT = 2 THEN
    COMMIT;
ELSE
    ROLLBACK;
END IF;
  • 설명:
    A 계좌에서 500원을 차감하고 B 계좌에 500원을 추가하는 작업입니다.
    두 업데이트가 모두 성공하면 COMMIT으로 작업을 확정하고, 하나라도 실패하면 ROLLBACK으로 복구합니다.

4. COMMIT과 ROLLBACK 비교

구분 COMMIT ROLLBACK

역할 트랜잭션 작업을 확정하여 영구적으로 저장 트랜잭션 작업을 취소하고 이전 상태 복구
데이터 상태 변경 사항이 데이터베이스에 반영됨 변경 사항이 취소됨
주요 용도 작업 성공 시 변경 내용 저장 작업 실패 또는 취소 시 복구
영향 범위 모든 사용자 트랜잭션 내 사용자만 해당

5. 실무에서의 트랜잭션 관리

5.1 트랜잭션 경계 설정

BEGIN, COMMIT, ROLLBACK을 적절히 활용하여 트랜잭션 경계를 명확히 정의하세요.

  • 시작: BEGIN;
  • 종료: COMMIT; 또는 ROLLBACK;

5.2 오류 처리

트랜잭션 중 오류가 발생했을 때, 자동으로 ROLLBACK이 실행되도록 설정합니다. 예를 들어 PL/SQL 블록에서는 EXCEPTION 구문을 활용할 수 있습니다.

BEGIN
    UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEE_ID = 103;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;

5.3 AUTOCOMMIT 설정

  • AUTOCOMMIT 활성화: 매 쿼리 실행 후 자동으로 COMMIT.
  • AUTOCOMMIT 비활성화: 명시적으로 COMMIT 또는 ROLLBACK 실행 필요.
    권장: 중요한 트랜잭션에서는 AUTOCOMMIT을 비활성화하여 작업을 수동으로 제어하세요.
SET AUTOCOMMIT OFF;

6. 주의사항

6.1 트랜잭션 잠금

  • 트랜잭션 중 변경된 데이터는 다른 사용자가 읽거나 수정할 수 없도록 잠금 상태가 됩니다.
  • 너무 긴 트랜잭션은 잠금 충돌(deadlock)을 유발할 수 있으니 적절히 관리하세요.

6.2 트랜잭션 종료 확인

COMMIT 또는 ROLLBACK을 명시하지 않으면 트랜잭션이 열린 상태로 유지될 수 있습니다. 작업 후 명시적으로 종료 명령을 실행하세요.


7. 마무리

COMMIT과 ROLLBACK은 데이터베이스 트랜잭션 관리의 핵심입니다. 이를 적절히 활용하면 데이터의 무결성을 유지하며 안전하게 작업할 수 있습니다. 실무에서 트랜잭션 관리 원칙을 준수하고, 상황에 따라 COMMIT과 ROLLBACK을 전략적으로 사용하여 안정적인 데이터 처리를 구현하세요!

반응형