10 분 소요

👨‍💻🏫KNU 2021-2 SW & media 데이터베이스 필기노트 12

1. 트랜잭션

하나의 작업을 수행하는데에 필요한 연산을 모아두는것으로 데이터베이스 변경연산 수행을 관리한다.
논리적인 작업의 단위로 복구와 병행작업에서 트랜잭션을 실행 단위로 사용한다.

1.1. 트랜잭션 특성

트랜잭션의 특성은 ACID(Atomicity, Consistency, Isolation, Durability)로 불린다.

원자성

  • 데이터베이스에서 수행된 연산이 모두 정상적으로 완료되거나 아예 실행이 되어서는 안되야하는 방식을 의미한다.
  • 트랜잭션 수행중 오류발생시 작업 전으로 돌려보내야한다.
  • 회복기능과 관련

일관성

  • 트랜잭션 수행후 데이터베이스는 일관된 상테를 유지해야함을 의미한다.
  • 병행제어기능과 관련

격리성

  • 수행 중인 트랜잭션이 완료될때까지 다른 트랜잭션이 개입할수 없다.
  • 병행제어기능과 관련

지속성

  • 트랜젝션수행후 데이터베이스에 반영한 수행 결과는 영구적이여야한다.
  • 회복기능과 관련

1.2. 트랜잭션 연산과 상태

commit 트랜잭션 수행 성공, 작업완료선언
rollback 트랜잭션 수행 실패, 실패선언

상태 설명
활동 트랜잭션 수행중
부분완료 트랜잭션 연산 종료
완료 수행결과를 데이터베이스에 반영후 commit연산을 끝낸상태
실패 장애 발생으로 트랜잭션 수행이 중단된 상태
철회 실패로인해 rollback이 수행된 상태

트랜잭션 수행 상태도

       
    실패-> 철회(rollback)
활동-> 부분완료->    
    완료(commit)  

2. 장애와 회복

2.1. 장애

유형 설명
트랜잭션장애 트랜잭션수행중 오류가 발생
발생원인 트랜잭션 논리오류, 데이터 오류, 시스템자원 과다사용, 처리대상의 부재
시스템장애 하드웨어결함(메인 메모리)
미디어장애 기록 매체(미디어)결함
응용프로그램   메인 메모리   디스크
A <-read A <-input A
B ->write B ->output B

디스크와 메인 메모리간의 데이터 이동은 블록단위로 수행된다. 메인 메모리는 버퍼블록, 디스크는 디스크블록단위로 수행된다.

응용 프로그램에서는 트랜잭션 수행시 메인 메모리 버퍼의 값을 가져오며 처리결과의 변수값을 메인 메모리에 저장하는 과정을 수행한다.

2.2. 회복

데이터베이스 회복의 핵심원리는 데이터 중복을 통해 이루어진다.

  • 덤프: 데이터베이스 전체를 다른 장치에 주기적으로 복사
  • 로그: 데이터베이스 트랜잭션 수행시 변경값과 변경후 값을 별도 파일에 기록 로그파일은 레코드 단위로 트랜잭션 수행과 함께 저장된다.

  • redo: 가장 최근 저장된 데이터베이스 복사본을 통해 로그를 사용하여 복사본 이후 실행된 연산을 재실행되어 장애 전 데이터베이스 상태로 복구한다 start-commit완료후면 redo.
  • undo : 로그를 사용해 시행된 모든 변경 연산을 취소하여 원래 상태로 복구한다. start이후 완료되지 않았다면 undo 지연갱신이면 redo

DB회복기법

  • 로그회복기법: 즉시 갱신 회복 기법, 지연 갱신 회복 기법
  • 검사 시점 회복 기법
  • 미디어 회복 기법

즉시회복기법: 트랜잭션 수행 중에 변경 연산의 결과를 데이터베이스에 즉시 반영, 데이터 변경 내용을 로그파일에 기록, 장애 발생 시점에따라 redo, undo연산 실행
지연 갱신 회복 기법: 트랜잭션 수행중 변경 연산의 결과를 로그파일에만 기록한다. 부분 완료후 데이터베이스에 반영한다. undo연산이 필요없다.
검사 시점 회복 기법: 로그 기록을 사용해 일정간견으로 검사 시점을 만든다. 장애 발생시 최신 검사시점이후 트랜잭션에만 회복 작업 수행
미디어 회복 기법: 덤프사용, 일정 주기마다 다른 매체에 덤프를 생성, 최신 덤프를 사용해 복구하며 필요시 redo연산 수행

3. 병행제어

병행 수행이란 여러 사용자가 데이터베이스를 동시 공유할수 있도록 여러개의 트랜잭션을 동시에 수행하는것을 의미한다. 인터리빙 방식을 사용하여 진행된다. 이때 동일한 데이터에 접근하여 연산을 수행하여도 문제가 발생하지핞고 정확한 수행결과를 얻을수있도록 수행을 제어하는것을 병행제어라고 한다.

갱신 분실: 병행 수행시 변경된 연산 결과를 다른 트랜잭션이 덮어써 연산이 무효화되는것을 갱신 분실이라한다 모순성: 여러 데이터 변경 연산을 실시할때 일관성없는 데이터베이스에서 데이터를 가져와 연산하여 모순된 결과가 발생하는것을 모순성이라한다. 연쇄복귀: 트랜잭션 완료전 장애 발생으로 인해 rollback하는경우 다른 트랜잭션에서도 rollback연산 이전 데이터를 사용하였으므로 rollback을 해줘야한다.

트랜잭션 스케쥴

트랜잭션 스케쥴 의미
직렬스케쥴 인터리빙 방식을 사용하지 않고 각 트랜잭션별로 연산을 순차적으로 실행 시키는것
비직렬스케쥴 인터리빙방식으로 이용하여 트랜잭션을 병행 수행하는것
직렬가능스케쥴 직렬 스케쥴과 같이 정확한 결과를 생성하는 비직렬스케쥴

직렬스케쥴: 다른 트랜잭션의 방해를 받지 않고 독립적 수행되므로 항상 모순이 없는 정확한 결과를 얻게된다. 다양한 직렬스케쥴이 만들어질수있고 직렬스케쥴마다 데이터에 반영되는 최종 결과가 다를수 있지만 직렬스케쥴의 결과는 모두 정확함 각 트랜잭션을 독립적으로 수행하기 때문에 병행수행으로 볼수없다.

비직렬스케쥴: 트랜잭션이 번갈아 연산을 수행하기에 하나의 트랜잭션이 끝나기전에 다른 트랜잭션 연산이 실행될수있다. 갱신분실 모순성 연쇄복귀등의 문제가 발생할수있다. 다양한 비직렬스케줄이 만들어 질수있고 그 중에는 잘못된 결과를 생성하는 경우도있다.

직렬 가능 스케쥴: 인터리빙 방식으로 병행수행하면서고 정확한 결과를 얻으루싱ㅆ다. 직렬 가능성을 보장하는 병행 제어기법을 사용하는것이 일반적이다.

병행제어기법: 병행수행하면서 직렬가능성을 보장하는 기법이다. 모든 트랜잭션이 준수할때 직렬 가능성이 보장되는 규약을 정의하고 모든 트랜잭션은 이 규약을 따른다.

로킹 기법: 한 트랜잭션이 먼저 접근한 데이터에 대한 연산을 끝낼때까지는 다른 트랜잭션이 그 데이터에 접근하지 못하도록한다.

태그:

카테고리:

업데이트:

댓글남기기