트랜잭션 로그
이 문서의 내용은 출처가 분명하지 않습니다. (2014년 3월) |
트랜잭션 로그(transaction log) 또는 데이터베이스 로그(database log, 바이너리 로그라고도 함)는 데이터베이스에서 충돌이나 하드웨어 고장에 대비해 데이터베이스 관리 시스템의 ACID 특성을 보장하기 위한 조작 이력을 가리킨다. 로그는 전원이 끊겨도 데이터를 저장할 수 있는 보조 기억 장치에 파일에 출력되는 경우가 많다. 데이터베이스를 시작한 후 일관성 없는 상태이거나 제대로 종료되지 않은 것을 감지하면, 데이터베이스 관리 시스템은 트랜잭션 로그를 읽고 다음과 같이 실시한다. 데이터 무결성과 지속성을 보장하기 위해 필요하다.
- 완료하지 않은 또는 롤백된 트랜잭션이 수행한 작업을 취소한다.
- 커밋하고 있지만 데이터베이스에 반영되지 않은 작업을 다시 수행한다.
- 트랜잭션 로그의 목표는 데이터 로그와는 다르다. 일반적으로 데이터 로그는 조작 이력을 쉽게 읽을 수 있는(human-readable) 표현으로 기록하기 위해 사용된다. 따라서 데이터베이스 관리 시스템은 트랜잭션 로그 및 데이터 로그를 모두 제공하는 경우가 일반적이다.
구조
[편집]트랜잭션 로그는 다음과 같은 구조를 가진다.
- 로그 시퀀스 번호(Log Sequence Number) : 로그 레코드의 고유 식별자이다. 일반적으로 번호가 고유하게 증가하는 값이 할당 ARIES 같은 복구 알고리즘에서 사용된다.
- 마지막 LSN : 마지막 레코드에 대한 참조. 이렇게하면 트랜잭션 로그는 연결리스트와 같은 구조를 가지게 된다.
- 트랜잭션 번호 : 레코드를 생성한 데이터베이스의 트랜잭션 번호.
- 종류 : 레코드 유형을 대표한다.
모든 로그 레코드는 일반적인 특성 외에도 작업마다 고유의 특성을 가지고 있다. 다음은 일반적인 데이터베이스가 사용하는 로그 레코드의 유형이다.
- 업데이트 레코드는 데이터베이스 업데이트 (변경)을 기록하고 다음 속성을 갖는다 :
- 페이지 번호 : 바뀜의 번호를 나타낸다.
- 길이 및 위치 : 페이지에서 변경 한 영역을 나타낸다.
- 업데이트 전후 이미지 : 업데이트된 영역의 업데이트 이전 및 업데이트된 값이다. 데이터베이스에서 모두 또는 한쪽만을 기록하는 차이가 있다.
- 보상 레코드는 업데이트 롤백을 기록한다. 레코드는 별도 업데이트 레코드를 가리킨다. 그 내용은 :
- Undo Next LSN : 보상 처리가 필요한 다음 레코드 번호이다.
- 커밋 레코드는 트랜잭션 커밋을 기록한다.
- 중단 레코드는 트랜잭션 롤백을 기록한다.
- 체크 포인트 레코드는 체크 포인트 처리가 완료되었는 지를 기록한다. 이 레코드는 로드할 가장 오래된 레코드를 보여주기 위해 복구 처리의 고속화에 공헌한다. 그 내용은 :
- Redo LSN : 체크 포인트 이후 처음 변경 사항 처리 레코드 번호. 이 레코드부터 작업을 다시 실행할 필요가 있다.
- Undo LSN : 체크 포인트에서 수행 중이던 트랜잭션이 기록한 가장 오래된 레코드 번호. 이 레코드 추가 처리를 보상해야 할 가능성이 있다.