컴퓨터/SQL

트랜잭션

해피밀세트 2020. 1. 22. 17:58

트랜잭션

1. 트랜잭션의 개념

  1) 트랜잭션이란?

     - 트랜잭션(Transaction) : 논리적인 일의 단위

     - 기본 설정 : 하나의 SQL은 하나의 트랜잭션임

     - 여러 개의 SQL문들이 합쳐져서 하나의 트랜잭션이 될 수도 있음

  2) 트랜잭션의 활용

     - 항공기 예약, 은행, 신용카드 처리, 대형 할인점 등

     - 대규모 데이터베이스를 수백, 수천 명 이상의 사용자들이 동시에 접근함 

     - 많은 사용자들이 동시에 데이터베이스의 서로 다른 부분 또는 동일한 부분을 접근하면서 데이터베이스를 사용함

       동시성

     - 동시성 제어

        - 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향

          = 이들을 순차적으로 수행하였을 때 데이터베이스에 미치는 영향과 같도록 보장함

        - 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지함

        - 여러 사용자나 여러 응용 프로그램들이 동시에 수행되어도 서로 간섭하지 못하도록 보장함

          트랜잭션 단위, 동시성 제어 

     - 회복

        - 데이터베이스를 갱신하는 도중에 시스템 고장 시에도 데이터베이스의 일관성을 유지함

           트랙잭션 단위 회복

  3) 트랜잭션이 없다면?

     ① 은행 계좌 이자 증가

         - 전체 계좌들에 대한 이자가 모두 계산되어야 함

         - 만약 일부 계좌 이자만 증가되고 컴퓨터가 다운되었다가 재가동 된다면?

           처음부터 다시 계산하면 이중 이자 계산이 됨

      ② 다양한 예약 시스템

          - 항공권, 극장 등의 예약 시스템

          - 좌석을 선점하고 돈을 내기 전에 시스템이 다운됨

          - 돈은 내지 않았지만 좌석을 잡았기 때문에 해당 좌석은 절대 다시 잡을 수 없어짐

      ③ 은행 계좌 이체 : A계좌에서 100원을 빼서 B계좌에 넣기

         - 계좌 이체 시 장애발생 

            UPDATE ACCOUNT

            SET BALANCE = BALANCE - 100

            WHERE ID = A

            (장애)

            UPDATE ACCOUNT

            SET BALANCE = BALANCE + 100

            WHERE ID = B

            - A 통장에서 돈만 빠져 나가고 B통장에 돈이 안 들어옴

              ⇨ 은행이 고객의 돈을 횡령한 것이 됨

        - 횡령을 피하기 위해 먼저 B 계좌에 돈을 입금… 

           UPDATE ACCOUNT

           SET BALANCE = BALANCE + 100

           WHERE ID = B

           ↓ (장애)

           UPDATE ACCOUNT

           SET BALANCE = BALANCE - 100

           WHERE ID = A

           - B 통장에서 돈이 들어 왔는데 A 통장에 돈이 안 빠짐

             ⇨ 은행에 막대한 손실이 발생함 

       - 두 개의 SQL을 모아서 하나의 트랜잭션(계좌이체 업무)으로 관리함 :

         두 DML문은 하나의 업무에 속한 작업들임

 

2. 트랜잭션의 특성 

  1) ACID

     ① Atomicity : 원자성

        - 한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음(All or Nothing)을 의미함

        - DBMS의 회복 모듈은 시스템이 다운되는 경우에, 부분적으로 데이터베이스를 갱신한 트랜잭션의 영향을

          취소함으로써 트랜잭션의 원자성을 보장함

        - 완료된 트랜잭션이 갱신한 사항은 트랜잭션의 영향을 재수행함으로써 트랜잭션의 원자성을 보장함

     ② Consistency : 일관성

        - 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에

          데이터베이스는 또 다른 일관된 상태를 가짐

        - 트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있음

     ③ Isolation : 격리성

         - 고립성이라고도 함

         - 한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신 중인 데이터를

           다른 트랜잭션들이 접근하지 못하도록 해야 함

         - 다수의 트랜잭션들이 동시에 수행되더라도 그 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로

           수행한 결과와 같아야 함

         - DBMS의 동시성 제어 모듈이 트랜잭션의 고립성을 보장함

         - DBMS는 응용들의 요구사항에 따라 다양한 고립 수준(Isolation Level)을 제공함

     ④ Durability : 영속성

        - 일단 한 트랜잭션이 완료되면 이 트랜잭션이 갱신한 것은 그 후에 시스템에 고장이 발생하더라도

          손실되지 않음    

        - 완료된 트랜잭션의 효과는 시스템이 고장 난 경우에도 데이터베이스에 반영됨

        - DBMS의 회복 모듈은 시스템이 다운되는 경우에도 트랜잭션의 지속성을 보장함

  2) ACID DB 기능

     - ACID 특성과 DB의 기능은 모두 다 연관이 있음(연관성이 높은 순서)

       - DB 회복 기능 : 원자성과 지속성에 연관됨

       - DB 동시성 제어 : 일관성과 고립성에 연관

       - 무결성 제약 조건 : 일관성과 관련

 

3. 트랜잭션의 상태

  1) 트랜잭션의 상태 변화


트랜잭션 제어문(TCL)

1. 트랜잭션 제어문(TCL) 

  1) COMMIT

     - 트랜잭션의 마지막 명령어가 수행되었음을 나타냄

     - 트랜잭션에 의한 변경을 확정

     - COMMIT된 트랜잭션은 철회가 불가능함

     - COMMIT 명령문 실행하기 전에 하나의 트랜잭션 변경한 결과를 다른 트랜잭션에서 접근할 수 없도록

       방지하여 일관성을 유지함 

  2) ROLLBACK

     - 트랜잭션의 변경을 취소하고 트랜잭션 종료 

  3) SAVEPOINT

     - 현재 트랜잭션에서 ROLLBACK 시킬 위치 지정

     - 대규모 트랜잭션(복수개의 명령어들로 이루진 트랜잭션)에서 오류 발생이 전체 트랜잭션을 취소 시키는 것이

       큰 부담이 될 수 있음

     - 실패한 일정부분만 취소 시키도록 함

 

2. 트랜잭션 모드 

  1) MS-SQL은 3가지의 트랙잭션 모드를 지원함

     ① 자동 커밋 트랜잭션

         - 하나의 명령문이 하나의 트랙잭션이 됨

         - MS-SQL에서 기본 모드임

     ② 명시적 트랜잭션

         - 명시적으로 사용자가 트랙잭션을 정의하는 형태

         - BEGIN TRAN ~ COMMIT TRAN(또는 ROLLBACK TRAN)으로 이루어짐

     ③ 묵시적 트랜잭션

         - 자동 커밋 트랜잭션의 반대되는 개념

         - 사용자가 COMMIT TRAN(또는 ROLLBACK TRAN)을 입력하기 전까지 복수 개의 명령문을

           하나의 트랜잭션으로 간주함

         - BEGIN TRAN이 필요 없음

         - 묵시적 트랜잭션의 설정 

           SET IMPLICIT TRANSACTIONS {ON|OFF} 

         - 트랜잭션 종료마다 사용자가 반드시 COMMIT / ROLLBAK을 명령문을 실행시켜야 함

         - 고급 사용자가 아닌 이상 가능한 사용하지 않는 것이 좋음

 

3. 트랜잭션 제어문(TCL) 활용 

  1) 간단한 트랜잭션 철회

     예) 실습을 위하여 DEPARTMENT 테이블 내용을 DEPT01로 복사하기 

     예) 트랜잭션을 시작한 후 DEPT01 테이블의 내용을 모두 지우고 트랜잭션 취소를 시켜보기

          ① 트랜잭션을 시작

          ② DEPT01 테이블 내용 지우기 DEPT01 내용 보기

          ③ ROLLBACK DEPT01 내용 보기

  2) 오류발생에 따른 트랜잭션 철회

     - 트랜잭션을 구성하는 명령문들 중 : 오류 발생 트랜잭션 철회

                                                     오류 발생하지 않음 완료 

        - MS-SQL에서 명령문의 오류는 @@ERROR라는 변수에 저장됨

        - T-SQL에서 IF ~ ELSE ~ 및 GOTO 같은 구문을 사용할 수 있음

     - DEPT01 테이블의 DNO는 NULL값이 올 수 없음

       - 테이블 구조정보 보는 법 : EXEC sp_help 테이블명 

     - 하나의 트랙잭션을 이용함

       ① DEPT01 테이블에서 부서번호 10번 튜플을 삭제함

       ② (NULL, ‘PRODUCT’, ‘Seoul’) 튜플을 삽입 오류 발생

       ③ 오류가 발생하면 해당 트랜잭션을 ROLLBACK함

  3) SAVEPOINT를 이용한 트랜잭션 부분 철회

    - 트랜잭션 내에서 SAVEPOINT의 지정

       SAVE TRAN 저장점명

       - 트랜잭션 내에 저장점명을 다르게 하면 여러 개의 SAVEPOINT를 지정할 수 있음 

    -  저장점 위치로 취소 

       ROLLBACK TRAN 저장점명 

    - 하나의 트랙잭션을 이용함

      ① DEPT01 테이블에서 부서번호 10번 튜플을 삭제함

      ② 저장점 설정함

      ③ (50, ‘PRODUCT’, ‘Seoul’) 추가함

      ④ 저장점으로 ROLLBACK

      ⑤ (60, DESIGN, ‘Jeju’) 추가함

          SAVEPOINT 에 의하여 (50, ‘PRODUCT’, ‘Seoul’)을 삽입되지 않을 것을 알 수 있음

          (60, ‘DESING’, ‘Jeju’)는 삽입되었음

반응형

'컴퓨터 > SQL' 카테고리의 다른 글

오라클 SQL 함수 정리 - ② 숫자 함수  (0) 2020.01.28
오라클 SQL 함수 정리 - ① 문자 함수  (0) 2020.01.28
데이터 삽입과 변경  (0) 2020.01.22
데이터 검색  (0) 2020.01.21
제약조건  (0) 2020.01.21