트랜잭션 로그

위키백과, 우리 모두의 백과사전.
(데이터베이스 로그에서 넘어옴)

트랜잭션 로그(transaction log) 또는 데이터베이스 로그(database log, 바이너리 로그라고도 함)는 데이터베이스에서 충돌이나 하드웨어 고장이 있었다고 해도 데이터베이스 관리 시스템ACID 특성을 보장하기 위한 조작 이력을 가리킨다. 로그는 전원이 끊겨도 데이터를 저장할 수 있는 보조 기억 장치에 파일에 출력되는 경우가 많다. 데이터베이스를 시작한 후 일관성 없는 상태이거나 제대로 종료되지 않은 것을 감지하면, 데이터베이스 관리 시스템은 트랜잭션 로그를 읽고 다음과 같이 실시한다. 데이터 무결성과 지속성을 보장하기 위해 필요하다.

  • 완료하지 않은 또는 롤백트랜잭션이 수행한 작업을 취소한다.
  • 커밋하고 있지만 데이터베이스에 반영되지 않은 작업을 다시 수행한다.
  • 트랜잭션 로그의 목표는 데이터 로그와는 다르다. 일반적으로 데이터 로그는 조작 이력을 쉽게 읽을 수 있는(human-readable) 표현으로 기록하기 위해 사용된다. 따라서 데이터베이스 관리 시스템은 트랜잭션 로그 및 데이터 로그를 모두 제공하는 경우가 일반적이다.

구조[편집]

트랜잭션 로그는 다음과 같은 구조를 가진다.

  • 로그 시퀀스 번호(Log Sequence Number) : 로그 레코드의 고유 식별자이다. 일반적으로 번호가 고유하게 증가하는 값이 할당 ARIES 같은 복구 알고리즘에서 사용된다.
  • 마지막 LSN : 마지막 레코드에 대한 참조. 이렇게하면 트랜잭션 로그는 연결리스트와 같은 구조를 가지게 된다.
  • 트랜잭션 번호 : 레코드를 생성한 데이터베이스의 트랜잭션 번호.
  • 종류 : 레코드 유형을 대표한다.

모든 로그 레코드는 일반적인 특성 외에도 작업마다 고유의 특성을 가지고 있다. 다음은 일반적인 데이터베이스가 사용하는 로그 레코드의 유형이다.

  • 업데이트 레코드는 데이터베이스 업데이트 (변경)을 기록하고 다음 속성을 갖는다 :
    • 페이지 번호 : 바뀜의 번호를 나타낸다.
    • 길이 및 위치 : 페이지에서 변경 한 영역을 나타낸다.
    • 업데이트 전후 이미지 : 업데이트된 영역의 업데이트 이전 및 업데이트된 값이다. 데이터베이스에서 모두 또는 한쪽만을 기록하는 차이가 있다.
  • 보상 레코드는 업데이트 롤백을 기록한다. 레코드는 별도 업데이트 레코드를 가리킨다. 그 내용은 :
    • Undo Next LSN : 보상 처리가 필요한 다음 레코드 번호이다.
  • 커밋 레코드트랜잭션 커밋을 기록한다.
  • 중단 레코드트랜잭션 롤백을 기록한다.
  • 체크 포인트 레코드는 체크 포인트 처리가 완료되었는 지를 기록한다. 이 레코드는 로드할 가장 오래된 레코드를 보여주기 위해 복구 처리의 고속화에 공헌한다. 그 내용은 :
    • Redo LSN : 체크 포인트 이후 처음 변경 사항 처리 레코드 번호. 이 레코드부터 작업을 다시 실행할 필요가 있다.
    • Undo LSN : 체크 포인트에서 수행 중이던 트랜잭션이 기록한 가장 오래된 레코드 번호. 이 레코드 추가 처리를 보상해야 할 가능성이 있다.