cs-study-11 | DB
2021, Apr 28
트랜잭션
- 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 한꺼번에 모두 수행되어야 할 일련의 연산들 (여러 줄이 될 수 있다)
트랜잭션의 특성 (ACID)
- Atomicity 원자성 : 트랜잭션의 연산은 DB에 모두 반영되도록 완료되든지 아니면 전혀 반영되지 않도록 복구 되어야 한다
- commit과 rollback
- Consistency 일관성 : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다
- 다른 DB 참조하는 외래키가 있는 경우 , 그 DB의 값이 변경될 경우 해당 DB의 외래키의 값도 변경되어야 한다
- update 로 값을 갱신 할 경우 해당되는 모든 행의 값이 변경되어야 한다
- Isolation 고립성 : 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어 들 수 없다
- 병행제어 : 여러개가 실행하는 것처럼 보여도 일렬처리를 한다
- Durability 영속성 : 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 DB에 저장된다
- commit을 하면 그대로 남아있음
트랜잭션 상태
1 - 활동 : 트랜잭션이 실행중인 상태
2.1 - 부분완료 : 트랜잭션의 마지막 연산까지 실행했지만 commit연산이 실행되기 직전의 상태
2.2 - 실패 : 트랜잭션 실행에 오류가 발생하여 중단된 상태
3.1 - 완료 : 트랜잭션이 성공적으로 종료되어 commit 연산을 실행한 후의 상태
3.2 - 철회 : 트랜잭션이 비정상적으로 종료되어 rollback 연산을 수행한 후의 상태
Q. 부분완료 와 완료의 차이점
-> 부분완료는 commit 요청이 들어왔을 때를 말한다 . 여기서 commit이 정상적으로 처리되면 완료이고 commit이 처리가 안될경우 실패이다
데이터베이스 복구
1 (활동) —– > 2.2 (실패)
- 지연갱신기법일 경우 : 무시
- 즉시갱신기법일 경우 : Undo(
취소
)
2.1 (부분완료) ——> 2.2 (실패)
- 언제나 Redo (
재수행
) 실행
Redo (재수행) | Undo (취소) |
---|---|
아카이브사본 + 로그 => 완료 후 상태 | 로그 + 후방향 취소 연산 -> 시작 상태 |
DB 내용 자체가 손상된 경우 가장 최근 복사본을 적재한 후 복사본 이후에 일어난 변경만 로그를 읽어서 재실행함으로써 DB내용을 복원 |
DB 내용자체에 손상이 되지는 않았지만 변경 중이거나 변경된 내용에 대해 신뢰성을 잃어버린 경우에 로그를 이용해서 모든 변경을 취소함으로써 원래의 DB상태로 복원 |
장애발생 시점을 기준으로 이미 완료된 트랜잭션에 해당 | 장애발생 시점에 진행중이던 트랜잭션에 해당 |
쓰기연산(commit) 을 재실행하여 변경된 값을 디스크에 저장 | 쓰기연산을 취소하여 이전 값을 다시 돌아감 (rollback) |