트랜잭션 로그 논리 아키텍처
SQL Server 트랜잭션 로그는 로그 레코드 문자열처럼 논리적으로 작동합니다. 각 로그 레코드는 LSN(로그 시퀀스 번호)으로 식별됩니다. 각 새 로그 레코드는 LSN과 함께 로그의 논리적 끝에 작성되며 이때 LSN은 오름차순입니다.
로그 레코드는 작성된 순서대로 저장됩니다. 각 로그 레코드에는 자신이 속한 트랜잭션의 ID가 포함됩니다. 각 트랜잭션에서 트랜잭션과 관련된 모든 로그 레코드는 트랜잭션의 롤백 속도를 높이는 후방 포인터로 체인에 개별적으로 연결되어 있습니다.
데이터 수정에 대한 로그 레코드는 수행된 논리적 연산이나 수정된 데이터의 이전 이미지와 이후 이미지를 기록합니다. 이전 이미지는 연산이 수행되기 전의 데이터 복사본이고 이후 이미지는 연산이 수행된 후의 데이터 복사본입니다.
연산을 복구하는 단계는 다음과 같이 로그 레코드의 유형에 따라 다릅니다.
기록된 논리적 연산
논리적 연산을 롤포워드하기 위해 해당 연산이 다시 수행됩니다.
논리적 연산을 롤백하기 위해 역 논리적 연산이 수행됩니다.
기록된 이전 및 이후 이미지
연산을 롤포워드하기 위해 이후 이미지가 적용됩니다.
연산을 롤백하기 위해 이전 이미지가 적용됩니다.
많은 유형의 작업이 트랜잭션 로그에 기록됩니다. 다음과 같은 작업이 여기에 포함됩니다.
각 트랜잭션의 시작과 끝
모든 데이터 수정 내용(삽입, 업데이트 또는 삭제). 여기에는 시스템 테이블을 비롯하여 모든 테이블에 대해 시스템 저장 프로시저 또는 DDL(데이터 정의 언어) 문에서 수행한 변경 내용이 포함됩니다.
모든 익스텐트 및 페이지 할당 또는 할당 취소
테이블이나 인덱스 만들기 또는 삭제
롤백 작업도 기록됩니다. 각 트랜잭션은 트랜잭션 로그에 공간을 예약하여 명시적 롤백 문이나 오류로 인해 발생한 롤백을 지원하기에 충분한 로그 공간을 확보합니다. 예약된 공간의 크기는 트랜잭션에서 수행되는 작업에 따라 다르지만 일반적으로 각 작업을 기록하는 데 사용되는 공간의 크기와 같습니다. 이렇게 예약된 공간은 트랜잭션 완료 시 해제됩니다.
마지막으로 작성된 로그 레코드로의 성공적인 데이터베이스 차원 롤백에 필요한 첫 번째 로그 레코드의 로그 파일 섹션을 로그의 활성 부분 또는 활성 로그라고 합니다. 로그의 이 섹션은 데이터베이스의 전체 복구를 수행하는 데 필요합니다. 활성 로그는 어떤 부분도 잘라낼 수 없습니다.