트랜잭션의 특성

트랜잭션이 개념은 하나의 논리적 작업 단위로 수행되는 일련의 작업이다.

이 의미에서는 '전부 되거나, 전부 안되거나'의 의미가 포함되어 있다.

트랜잭션은 ACID(다음 항목의 각 첫 글자)라고 불리는 특성을 가지고 있다.


- 원자성(Atomicity)

트랜잭션은 분리할 수 없는 하나의 단위이다. 작업이 모두 수행되거나 하나도 수행되지 않아야한다.


- 일관성(Consistency) 

트랜잭션에서 사용되는 모든 데이터는 일관되어야 한다. 이 일관성은 ‘잠금(Locking)’과 관련이 깊다.


- 격리성(Isolation) 

현재 트랜잭션이 접근하고 있는 데이터는 다른 트랜잭션에서 격리되어야 한다.

트랜잭션이 발생되기 이전 상태나 완료된 이후 상태를 볼 수는 있지만, 트랜잭션이 진행 중인 중간 데이터를 볼 수 없다.(단, 예외도 있다.)


- 영속성(Durability)

트랜잭션이 정상적으로 종료된다면 그 결과는 시스템 오류가 발생하더라도 시스템에 영구적으로 적용된다.



트랜잭션 로그파일과 트랜잭션의 관계

데이터베이스의 데이터 파일은 1개 이상으로 이루어진다.

그냥 1개로만 데이터 파일을 구성한다면 확장영을 *mdf로 붙이며, 두 번째부터 추가된 데이터 파일은 확장명을 *ndf로 붙인다.

이는 강제 조항은 아니지만, 특별히 확장명을 다른 것으로 쓸 이유는 없으므로 그냥 따르는 게 좋다.

한편, 트랜잭선 로그 파일도 1개 이상으로 구성할 수 있으나, 별도의 디스크로 구성할 것이 아니라면 여러 개의 작은 로그 파일보다는 1 개의 큰 로그 파일이 성능에 더 도움이 된다.



- 트랜잭션 로그 파일을 사용하는 이유

가장 흔한 예로 은행의 사례를 들 수 있다.

만약 A라는 사람에게 100만원을 송금 할 경우를 생각해 보자.

기본적인 과정은 〈통장에서 100만원 빠짐〉 • (100만 원 을 A라는 사람의 은행으로 전송〉 • (A의 통장에 100만 원 입금됨〉 정도일 것이다.

그런 데 만약 두 번째 단계인 100만원을 A라는 사람의 은행으로 전송하는 중에 네트워크 이상 이나 정전 등으로 문제가 발생한다면 어떻게 될까?

통장에서는 100만 원이 줄어들었는데, 돈을 받은 사람이 아무도 없다면? 문제가 심각해질 수 있다.

하지만 그런일은 발생하지 않는다.

그 이유는 트랜잭션 로그 파일이 있기 때문이다.

트랜잭션 로그 파일을 사용함으로써, 다시 전기가 들어왔을 때 A의 통장에 100만 원이 입금되거나, 통장에서 100만 원을 인출한 것을 취소시킨다.

물론 후자 의 경우에 다시 송금해야 하는 귀찮은 일이 발생하지만 100만 원이 날라가는 대형 사고는 발생하지 않을 것이다.

이것이 데이터베이스의 무결성이며, 이를 위해서 트랜잭션 로그 파일을 사용하는 것이다.



트랜잭션의 개념과 작동 방식 

트랜잭션(Transaction)의 개념은 DBMS에서 아주 중요한 부분 중 하나이므로, 잘 이해할 필요가 있다. 트랜잭션을 정의하면, ‘하나의 논리적 작업 단위로 수행되는 일련의 작업’ 이다. 단순히 이야기하면, 'SQL의 묶음’이라고 할 수 있다. SQL의 묶음에는 SELECT/ INSERT /UPDATE/DELETE가주로 해당된다. 특히, 트랜잭션은 ‘데이터를 변경시키는 INSERT, UPDATE, DELETE의 묶음’이라고 생각해도 된다. 



- 트랜잭션 예제

1
2
3
4
5
6
USE sqlDB
GO
UPDATE userTbl SET addr = N’제주’ WHERE userID = N’KBS’ -- 김범수
UPDATE userTbl SET addr = N’미국’ WHERE userID = N’KKH’ -- 김경호
UPDATE userTbl SET addr = N’호주’ WHERE userID = N’JYP’ -- 조용필
GO
cs

앞의 쿼리문에서 트랜잭션이 몇 번 발생했을까?

UPDATE가 연속 3개 나왔으므로 3개를 하나로 묶어서 트랜잭션이 1 번 발생한 것처럼 보일 수 있으나, 사실은 3번 발생했다.

각각의 UPDATE는 트랜잭션을 각각 하나씩 발생시킨다 SQL을 트랜잭션 단위로 묶으려면 다음과 같이 SQL을 묶어줘야 한다.


1
2
3
4
5
BEGIN TRANSACTION(또는 BEGIN TR뼈)
UPDATE userTbl SET addr = N’제주’ WHERE userID = N’KBS’ -- 김범수
UPDATE userTbl SET addr = N’미국’ WHERE userID = N’KKH’ -- 김경호
UPDATE userTbl SET addr = N’호주’ WHERE userID = N’JYP’ -- 조용필
COMMIT TRANSACTION(또는 COMMIT TRAN 또는 COMMIT WORK) 
cs


COMMIT TRANSACTION 대신에, ROLLBACK TRANSACTION을 사용하게 되면 현재 트랜잭션들이 모두 취소된다.

BEGIN TRAN

~~~

ROLLBACK TRAN 사이의 모든 데이터의 수정이 취소된다.

몇몇 특별한 경우를 제외하고는 일부로 ROLLBACK TRAN을 사용할 일은 별로 없으므로 그냥 알아만 두자



트랜잭션 처리 과정

- 예외 상황이 발생하지 않은 정상 처리 과정

1. 입력된 업데이트를 순서대로 처리

2. 로그파일에 기록

3. 변경된 데이터로 적용

4. 데이터 변경 완료

5. 체크포인트 표시



- 예외 상황이 발생된 처리 과정

1. 정전 발생

2. BEGIN TRAN

3. UPDATE 1 -> 11

4. 데이터 파일의 1을 메모리에 올림

5. 11 변경

6. 3에서 5 반복

7. COMMIT TRAN



반응형

'Programming > Database' 카테고리의 다른 글

SQL Join 사용해보기  (0) 2017.06.15
SQL Update 사용해보기  (0) 2017.06.14
SQL Insert, Delete 사용해보기  (0) 2017.06.08
테이블 만들기 및 SQL Select 사용 해보기  (0) 2017.06.08
인덱스의 개념  (0) 2017.05.30
DB 공부하기  (0) 2017.05.25
데이터 베이스  (0) 2015.08.16