트랜잭션 로그
Transaction log![]() | 이 기사는 목록 형식이지만 산문으로 읽는 것이 더 나을 것이다.(2015년 6월) |
컴퓨터 과학 데이터베이스 분야에서 트랜잭션 로그(트랜잭션 저널, 데이터베이스 로그, 바이너리 로그 또는 감사 내역도 포함)는 크래시 또는 하드웨어 장애에 대한 ACID 속성을 보증하기 위해 데이터베이스 관리 시스템에 의해 실행된 작업의 이력입니다.실제로 로그는 데이터베이스에 대한 변경 사항을 나열하는 파일로, 안정적인 스토리지 형식으로 저장됩니다.
기동 후에 데이터베이스가 부정합 상태 또는 정상적으로 셧다운되지 않은 경우 데이터베이스 관리 시스템은 데이터베이스 로그에서 커밋되지 않은 트랜잭션을 확인하고 이들 트랜잭션에 의해 이루어진 변경을 롤백한다.또한 이미 커밋되었지만 데이터베이스에서 변경 사항이 아직 구현되지 않은 모든 트랜잭션이 다시 적용됩니다.둘 다 트랜잭션의 원자성과 내구성을 보장하기 위해 수행됩니다.
이 용어는 일반적으로 데이터베이스 관리 시스템이 제공하는 다른 사람이 읽을 수 있는 로그와 혼동해서는 안 됩니다.
데이터베이스 관리 시스템에서 저널은 주어진 프로세스에 [1][2][3][4]의해 변경된 데이터의 기록입니다.
일반 데이터베이스 로그의 해부도
데이터베이스 로그 레코드는 다음과 같이 구성됩니다.
- Log Sequence Number(LSN; 로그 시퀀스 번호): 로그 레코드의 고유 ID.LSN을 사용하면 로그를 일정 시간 내에 복구할 수 있습니다.대부분의 LSN은 단조롭게 증가하는 순서로 할당되어 있기 때문에 ARIES 등의 회복 알고리즘에 도움이 됩니다.
- Prev LSN: 마지막 로그 레코드에 대한 링크.이는 데이터베이스 로그가 링크된 목록 형식으로 구성됨을 의미합니다.
- 트랜잭션 ID 번호:로그 레코드를 생성하는 데이터베이스 트랜잭션에 대한 참조입니다.
- 유형: 데이터베이스 로그 레코드의 유형을 설명합니다.
- 로그 레코드의 기입을 트리거한 실제 변경에 관한 정보.
데이터베이스 로그 레코드 유형
이 섹션은 확인을 위해 추가 인용문이 필요합니다.(2016년 7월 (이 및 ) |
모든 로그 레코드에는 위의 일반 로그 애트리뷰트와 그 유형에 따른 기타 애트리뷰트(위와 같이 Type 애트리뷰트에 기록)가 포함됩니다.
- Update Log Record는 데이터베이스의 업데이트(변경사항)를 기록합니다.여기에는 다음과 같은 추가 정보가 포함됩니다.
- PageID : 변경된 페이지의 Page ID에 대한 참조입니다.
- 길이 및 오프셋: 보통 페이지의 길이(바이트 단위)와 오프셋이 포함됩니다.
- 전후 이미지:페이지 변경 전후의 페이지 바이트 값을 포함합니다.일부 데이터베이스에는 하나 또는 둘 다 이미지가 포함된 로그가 있을 수 있습니다.
- Compension Log Record(CLR; 보상 로그 레코드)는 데이터베이스에 대한 특정 변경 롤백을 기록합니다.각 레코드는 다른 하나의 업데이트 로그 레코드와 정확히 일치합니다(단, 해당 업데이트 로그 레코드는 일반적으로 보정 로그 레코드에 저장되지 않음).여기에는 다음과 같은 추가 정보가 포함됩니다.
- undoNextLSN: 이 필드에는 마지막 업데이트로그를 쓴 트랜잭션에 대해 취소되는 다음 로그레코드의 LSN이 포함됩니다.
- 커밋 레코드는 트랜잭션 커밋 결정을 기록합니다.
- Abort Record는 트랜잭션을 중단하고 롤백할 결정을 기록합니다.
- 체크포인트 레코드는 체크포인트가 작성되었음을 나타냅니다.이것들은 복구 속도를 높이기 위해 사용됩니다.로그의 과거 정보를 오래 읽을 필요가 없는 정보를 기록합니다.이것은 체크 포인트알고리즘에 따라 다릅니다.체크포인트 작성 중 모든 더러운 페이지가 지워진 경우(Postgre 참조)SQL)은 다음을 포함할 수 있습니다.
- redoLSN: 더러운 페이지에 해당하는 첫 번째 로그 레코드(체크포인트 시 플러시되지 않은 첫 번째 업데이트)에 대한 참조입니다.여기서 복구 시 redo를 시작해야 합니다.
- undoLSN: 가장 오래된 진행 중인 트랜잭션의 가장 오래된 로그 레코드에 대한 참조입니다.이것은 진행 중인 모든 트랜잭션을 취소하는 데 필요한 가장 오래된 로그 레코드입니다.
- 완료 기록은 이 특정 트랜잭션에 대한 모든 작업이 완료되었음을 나타냅니다.(완전 커밋 또는 중단됨)