cs-study-11 | DB

트랜잭션

  • 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
  • 한꺼번에 모두 수행되어야 할 일련의 연산들 (여러 줄이 될 수 있다)




트랜잭션의 특성 (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)

You might also enjoy