데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 트랜잭션 로그 아키텍처(1/4)

– 트랜잭션 로그 논리 아키텍처

 

Version : SQL Server 2005, 2008, 2008R2, 2012

 

데이터베이스의 무결성을 보장하기 위해서 사용되는 트랜잭션 로그의 기록 방법 및 데이터 복구에 트랜잭션 로그가 사용되는 방법을 이해하고 기본 아키텍처에 대해서 알아 보자.

 

이번 트랜잭션 로그 아키텍처는 총 4부로 진행 된다.

 

SQL Server 트랜잭션 로그는 로그레코드 문자열처럼 논리적으로 작동 한다. 각 로그 레코드는 LSN(로그 시퀀스 넘버)으로 식별 된다. 각 새 로그 레코드는 LSN과 함께 로그의 논리적 끝에 작성되며 이때 LSN은 오름차순이다.

 

로그 레코드는 작성된 순서대로 저장 된다. 각 로그 레코드는 자신이 속한 트랜잭션 ID가 포함된다. 각 트랜잭션에서 트랜잭션과 관련된 모든 로그 레코드는 트랜잭션의 롤백 속도를 높이는 후방 포인터로 체인에 개별적으로 연결 되어 있다.

 

아래 스크립트를 실행 하면 트랜잭션 로그에 대해 LSN이 순차적으로 발급되어 있음을 확인 할 수 있다.

DBCC LOG(SW_TEST)

 

 

 

데이터 수정에 대한 로그 레코드는 수행된 논리적 연산이나 수정된 데이터의 이전 이미지와 이후 이미지를 기록 한다. 이전 이미지는 연산이 수행되기 전의 데이터 복사본이고 이후 이미지는 연산이 수행된 후의 데이터 복사본이다.

 

[연산 복구 단계]

  • 기록된 논리적 연산
    • 논리적 연산을 롤포워드 하기 위해 해당 연산이 다시 수행 된다.
    • 논리적 연산을 롤백 하기 위해 논리적 연산이 역으로 수행 된다.

 

  • 기록된 이전 및 이 후 이미지
    • 연산을 롤포워드하기 위해 이후 이미지가 적용
    • 연산을 롤백 하기 위해 이전 이미지가 적용

 

[트랜잭션에 기록되는 작업]

  • 각 트랜잭션의 시작과 끝
  • 모든 데이터 수정 내용(삽입, 업데이트, 삭제). 시스템 테이블을 비롯한 모든 DDL 또는 프로시저 변경 사항 내용이 포함됨.
  • 모든 익스텐트 및 페이지 할당 또는 할당 취소 내역
  • 테이블이나 인덱스 만들기 또는 삭제 내역
  • 롤백 작업 내역

 

 

각 트랜잭션은 트랜잭션 로그에 공간을 예약하여 명시적 롤백 문이나 오류로 인해 발생한 롤백을 지원하기에 충분한 로그 공간을 확보 한다. 예약된 공간의 크기는 트랜잭션에서 수행되는 작업에 따라 다르지만 일반적으로 각 작업을 기록하는데 사용되는 공간의 크기와 같다. 예약된 공간은 트랜잭션 완료 시 해제 된다.

 

[활성 로그]

마지막으로 작성된 작업의 롤백에 필요한 첫 번째 로그 레코드의 로그 파일 섹션을 로그의 활성 부분 또는 활성 로그라고 한다. 이 섹션은 데이터베이스의 전체 복구를 수행하는데 필요하다. 활성 로그는 어떤 부분도 잘라낼 수 없다.

 

[참고 자료]

http://msdn.microsoft.com/ko-kr/library/ms180892(v=sql.105).aspx

http://www.confio.com/logicalread/sql-server-dbcc-log-command-details-and-example/

http://rusanu.com/2012/01/17/what-is-an-lsn-log-sequence-number/


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp


No. Subject Author Date Views
1770 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (3/4) – 뷰(View)의 인덱스 확인 jevida(강성욱) 2016.09.27 973
1769 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인 jevida(강성욱) 2016.09.27 1447
1768 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables jevida(강성욱) 2016.09.27 933
1767 SQL Server DMV를 이용한 통계 정보 확인 jevida(강성욱) 2016.09.27 1471
1766 DMV를 이용한 플랜 캐시 사용 정보 확인 jevida(강성욱) 2016.09.27 1172
1765 SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1065
1764 SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1367
1763 SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1068
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1125
1761 SQL Server 트랜잭션 로그 아키텍처(4/4) – 미리 쓰기 트랜잭션 로그 jevida(강성욱) 2016.09.27 1537
1760 SQL Server 트랜잭션 로그 아키텍처(3/4) – 검사점 및 로그의 활성 부분 jevida(강성욱) 2016.09.27 1048
1759 SQL Server 트랜잭션 로그 아키텍처(2/4) – 트랜잭션 로그 물리 아키텍처 jevida(강성욱) 2016.09.27 1094
» SQL Server 트랜잭션 로그 아키텍처(1/4) – 트랜잭션 로그 논리 아키텍처 jevida(강성욱) 2016.09.27 1249
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 798
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1128
1755 SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 972
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1365
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3173
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2177
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5124





XE Login