SQL-TCL/DCL

Sejin·2025년 5월 29일
0

Data, DB공부

목록 보기
23/26

TCL

Transaction

데이터베이스의 논리적 연산 단위

  • 의미적으로 분할할 수 없는 최소의 단우

  • 일반적으로 하나의 트랙잭션은 여러 SQL 문장을 포함함

  • 성공시 모든 연산을 반영, 취소 시 모든 연산을 취소함
    ➡️ ALL or Nothing

트랙잭션의 예

  • 도서주문
    재고 수령 감소, 주문 내역 생성, 결제, 포인트 적립
  • 계좌이체
    A 계좌의 잔액 감소, B계좌의 잔액 증가
  • 교통카드 충전
    잔액 증가, 결제

트랜잭션의 상태

1. 활동(Active)

  • 트랜잭션이 시작되고 실행 중인 상태
  • 트랜잭션은 이 상태에서 데이터베이스에 대한 연산을 수행함(읽기, 쓰기 등)

2. 부분 완료(Partially Committed)

  • 트랜잭션이 실행되고 데이터베이스에 반영되지는 않은 상태

3. 완료(Committed)

  • 트랜잭션의 모든 연산이 성공적으로 실행되어 데이터베이스에 반영된 상태

4. 실패(Failed)
트랜잭션 수행 중 오류가 발생하여 정상적으로 완료될 수 없는 상태

5. 철회(Aborted)
모든 변경 사항이 취소되며, 데이터베이스는 트랜잭션 이전의 상태로 복구

예시) 은행 계좌 A에서 다른 계좌 B로 1000달러를 이체하려고 함

  • 트랜잭션 과정



트랜잭션의 특성(ACID 특성)

원자성(Atomicity)

  • 트랜잭션의 연산은 모두 성공하거나 모두 실패해야함
  • "All of nothing"의 원칙을 따름

일관성(Consistency)

  • 트랜잭션 실행 전후에 데이트베이스는 모든 제약조건과 규칙을 만족해야 함
  • 데이터 베이스 상태의 일관성이 유지됨

고립성(Isolation)

  • 트랜잭션 실행 도중, 다른 트랜잭션의 영향을 받지 않아야 함
  • 독립적으로 수행되어야 함

지속성(Durability)

  • 성공적으로 완료된 트랜잭션의 결과는 영구적으로 저장되어야 함

CRUD 분석과 활용

CRUD 정의

  • Create(생성)

  • Read(읽기)

  • Update(갱신)

  • Delete(삭제)

CRUD 매트릭스 작성 및 분석

  • 트랜잭션 주기별 발생 횟수를 파악하여 연관된 테이블을 분석함

  • 트랜잭션이 집중되는 테이블을 식별하여 디스크 구성 자료로 활용함

  • 외부 프로세스 트랜잭션 부하가 집중되는 데이터베이스 채널을 파악하고, 분산하여 연결 지연이나 타임아웃 오류를 방지함

CRUD 매트릭스 예

계좌 관리 업무

  • '계좌(Accounts)' 테이블에서 모든 CRUD 작업을 수행
  • '고객(Customers)'과 '거래(Transactions)' 테이블에서는 조회(Read) 작업을 수행

고객 관리 업무

  • '고객(Customers)' 테이블에서 모든 CRUD 작업을 수행
  • '계좌(Accounts)'와 '거래(Transactions)' 테이블에서는 조회(Read) 작업을 수행

거래 처리 업무

  • '거래(Transactions)' 테이블에서 거래의 생성(Create), 조회(Read), 업데이트(Update)를 수행
  • '계좌(Accounts)' 테이블에서는 계좌 생성(Create)과 조회(Read)를 수행
  • '고객(Customers)' 테이블에서는 조회(Read) 작업을 수행

트랜잭션 분석

트랜잭션 양 분석
CRUD 매트릭스를 기반으로 테이블별 트랜잭션 양 분석

데이터 양 예측
테이블에 저장되는 데이터 양을 예측하여 DB 용량 산정 및 구조 최적화

디스크 입출력 분산
과도한 접근이 이루어지는 테이블을 여러 디스크에 분산 배치하여 성능 향상 기대


TCL(Transaction Control Language)

주요 명령어

COMMIT
변경된 내용을 데이터베이스에 영구적으로 반영

ROLLBACK
변경된 내용을 취소하고 이전 상태로 복귀

  • 기본 : 마지막 COMMIT 상태로 복귀
  • SAVEPOINT 지정 시 : 지정한 저장점까지 복귀

SAVEPOINT
트랜잭션의 부분 복귀를 위해 저장점을 설정

트랜잭션 실행 및 종료

SQL 문 실행 시 트랜잭션이 자동으로 시작

트랜잭션은 COMMIT 또는 ROLLBACK 명령어로 실행 시 종료

자동 COMMIT 및 자동 ROLLBACK

DDL 문장 실행 시
자동 COMMIT 발생

정상 종료
자동 COMMIT

비정상 종료
자동 ROLLBACK

ROLLBACK

변경된 내용이 모두 취소됨

트랜잭션 실행 이전의 데이터 상태로 복구됨

예시 흐름

SAVEPOINT

SAVEPOINT는 트랜잭션의 부분 복구를 유연하게 처리할 수 있도록 도와줌

트랜잭션 도중 특정 지점을 SAVEPOINT으로 설정함

지정한 SAVEPOINT까지 ROLLBACK이 가능함

특징

  • 특정 SAVEPOINT 까지 ROLLBACK 하면, 그 이후의 명령어와 저장점은 모든 무효가 됨
  • 일부 도구(TOOL)에서는 SAVEPOINT가 지원되지 않을 수 있음
  • 동일한 이름으로 여러 저장점을 정의할 경우, 가장 마지막에 정의한 저장점이 유효함

예시 흐름

SELECT * FROM STUDENT;
INSERT INTO STUDENT VALUES
('세이브포인트','999','A1000', TO_DATE('2999-09-09', 'YYYY-MM-DD'),99,",999);
SELECT * FROM STUDENT;
SAVEPOINT A;
UPDATE STUDENT SET S_SCORE=S_SCORE+100;
SELECT * FROM STUDENT;
SAVEPOINT B;
DELETE FROM STUDENT WHERE S_NAME='대한민국';
SELECT * FROM STUDENT;
ROLLBACK TO B;
SELECT * FROM STUDENT;

DCL(Data Control Language)

데이터베이스의 보안, 무결성, 회복, 병행 수행 등을 제어하는 명령어 집합

주로 데이터베이스 관리자(DBA)가 데이터 관리를 목적으로 사용함

DCL 개념

주요 명령어

GRANT
권한 부여

REVOKE
권한 취소

사용자 등급

DBA
데이터베이스 관리자

RESOURCE
데이터베이스 및 테이블 생성 권한이 있는 사용자

CONNECT
단순 사용자(정보 검색만 가능)

특정 사용자에게 필요한 권한만 부여하여 관리의 효율성 향상

형식

권한 부여
GRANT 사용자등급 TO 사용자ID리스트;

권한 회수
REVOKE 사용자등급 FROM 사용자ID리스트;

예시

DCL의 역할

데이터 접근을 제어하여 보안을 강화함

특정 사용자에게 필요한 권한만 부여해 관리 효율성을 향상시킴

사용자 관리 예

새로운 사용자 생성 및 패스워드 설정,
사용자 비밀번호 변경

권한 부여, 권한 회수

사용자 계정 삭제

DROP 연산 수행 시

  • CASCADE 옵션 사용:
    사용자가 생성한 객체(테이블, 뷰 등)도 함께 삭제됨
  • CASCADE 옵션 미사용:
    사용자가 생성한 객체가 없을 경우에만 계정을 삭제할 수 있음

테이블 및 속성에 대한 권한 부여 및 취소

형식

권한_리스트

WITH GRANT OPTION
부여받은 권한을 다른 사용자에게 재부여할 수 있는 권한을 추가로 부여함

REVOKE GRANT OPTION FOR
다른 사용자에게 권한을 부여할 수 있는 권한을 취소함

CASCADE
권한 취소 시, 해당 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소

권한 부여

권한 취소

profile
Sejin's Journey for Developers

0개의 댓글