트랜잭션이란?
'하나의 논리적 작업 단위로 수행되는 일련의 작업'
더 정확히 말하면 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위이다.
'상태 변화'란 SQL문에서의 'INSERT, UPDATE, DELETE, SELECT'등과 같은 문장으로
데이터베이스에 접근하는 것을 의미한다.
특징
트랜잭션의 특징에는 'ACID'라는 성질이 있다.
ACID
- Atomicity (원자성)
- 모두 수행되거나 하나도 수행되지 않아야 한다.
- 99개가 성공하고 1개가 실패해도 모두 ROLLBACK 된다.
- Consistency (일관성)
- 트랜잭션에 사용되는 모든 데이터는 일관되어야 한다. (Locking과 관련이 있다.)
- 일관성이란 예를들어 계좌이체를 성공했다면 A와 B 계좌의 잔액의 합이 일치해야 한다는 것.
- Isolation (고립성)
- 현재 트랜잭션이 접근하고 있는 데이터는 다른 트랜잭션으로부터 격리되어야 한다
- 예를 들어 A라는 계좌를 작업하고 있다면 다른 트랜잭션이 A가 작업이 끝날 때까지 접근할 수 없다는 것.
- Durability (지속성)
- 트랜잭션이 정상적으로 종료된다면 그 결과는 시스템 오류가 발생하더라도 시스템에 영구적으로 적용됨.
- 데이터 복구와 관련이 있다.
트랜잭션의 연산 / 상태
트랜잭션의 연산
Commit
커밋은 현재까지의 임시 작업 내용을 확정짓는 것이다.
하나의 트랜잭션이 성공적으로 끝이났고, 데이터베이스가 일관성 있는 상태에 있을 때, 하나의 트랜잭션이 끝이 났다는 것을 알려주기 위 연산이다.
Rollback
현재까지의 임시 작업 내용을 취소시키는 것이다.
하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분으로만 연산된 결과를 다시 취소시킨다.
트랜잭션의 상태
- 활동 (Active)
- 트랜잭션이 실행중인 상태
- 실패 (Failed)
- 트랜잭션 실행에 오류가 발생해 중단된 상태
- 철회 (Aborted)
- 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
- 부분 완료 (Partially Commit)
- 트랜잭션이 커밋되기 직전까지의 상태
- 완료 (Committed)
- 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
트랜잭션 처리과정
BEGIN TRAN
UPDATE 1 ->11
UPDATE 2 ->22
UPDATE 3 ->33
COMMIT TRAN
트랜잭션이 일어날 때 관여하는 것들을 나열하자면 메모리 (데이터 캐시) , 데이터 파일 , 로그 파일이다.
트랜잭션이 일어나면 데이터 파일에 기록된 값들을 로딩하고, 변경사항을 메모리에 적용한 후
로그파일에 일련번호와 함께 저장하는 방식이다. 최종적으로 데이터 파일의 상태가 변경되는 것은
COMMIT이 일어난 직후이다. 그 전까지는 그저 로그파일에 기록되는 것뿐이다.
1. BEGIN TRAN 문장을 실행하면 지금부터 트랜잭션을 시작하는 것으로 인식
2. BEGIN TRAN이 일련번호와 함께 트랜잭션 로그 파일의 처음이나 이전의 체크포인트 이후 이어서 기록
3. UPDATE 1-> 11이 실행되면, 데이터 파일에 실제로 존재하는 데이터 '1'이 데이터 캐시라고 부르는 메모리에 로딩됨. 그리고 '1' 값을 '11'로 변경한다.
4. 메모리에 데이터가 변경되었다면 UPDATE 1->11을 트랜잭션 로그 파일에 일련번호를 붙여서 순차적으로 기록한다.
5. COMMIT TRAN을 실행하지 않았으므로, 트랜잭션 로그 파일에만 UPDATE 문이 기록되었을 뿐, 데이터 파일에는 아무런 변화가 없다.
6. 2->22 ,3->33 실행 후 COMMIT TRAN이 실행되면 COMMIT TRAN을 일련번호와 함께 트랜잭션 로그 파일에 기록한다.
7. COMMIT TRAN 문장은 트랜잭션의 처리를 완료했다는 의미이므로 메모리의 변경된 데이터를 차례대로 데이터 파일에 적용시킨다.(데이터를 커밋시켰다.)
8. COMMIT TRAN 다음에 체크포인트를 설정해 놓는다. COMMIT TRAN 전에 정전이 난 경우 체크 포인트까지 전부 롤백한다.
COMMIT TRAN을 기록한 직후에 정전이 난 경우 (데이터 파일에 기록되지 않은 경우) 체크포인트부터 COMMIT TRAN까지 롤 포워딩을 한다. (다시 똑같은 작업을 재실행하는 것)
'데이터베이스 > 데이터베이스 개념정리' 카테고리의 다른 글
정규형 (0) | 2020.03.05 |
---|---|
인덱스 (0) | 2020.02.23 |