본문 바로가기

프로그래밍/MSSQL

[MSSQL] 트랜잭션 로그 보기

반응형

 

 

 

트랜잭션 로그 조회

데이터베이스에서 발생하는 행위들이 저장되는 트랜잭션 로그를 조회해보자

 

fn_dblog(시작 LSN, 종료 LSN)

시작 LSN, 종료 LSN이 NULL일 경우 트랜잭션 로그 파일의 모든 로그 결과를 반환한다.

 

SELECT *
FROM fn_dblog(NULL, NULL)

 

결과 데이터

 

 

 

특정 테이블의 트랜잭션 로그

AllocUnitName 칼럼에서 테이블의 이름을 확인할 수 있다.

 

SELECT
	[Current LSN],
	[Operation],
	[Transaction ID],
	[AllocUnitId],
	[AllocUnitName],
	[Begin Time],
	[End TIme]
FROM fn_dblog (NULL, NULL)
WHERE AllocUnitName = 'dbo.ggmouse'

 

 

 

특정 사용자의 트랜잭션 로그

Transaction SID 컬럼에 SUSER_SID 함수를 이용하여 확인할 수 있다.

 

SELECT
	[Current LSN],
	[Operation],
	[Transaction ID],
	[AllocUnitId],
	[AllocUnitName],
	[Begin Time],
	[End TIme]
FROM fn_dblog (NULL, NULL)
WHERE [Transaction SID] = SUSER_SID('ggmouse');

 

 

 

 

Operation 컬럼

행위를 나타내는 Operation 칼럼의 값들에 대해 알아보자

너무 많기 때문에, 주요한 몇 가지에 대해서만 확인해보자

 

Operation Description
LOP_BEGIN_XACT 트랜잭션 시작을 의미한다.
LOP_COMMIT_XACT 트랜잭션 커밋을 의미한다.
LOP_INSERT_ROWS 테이블에 행 입력을 의미한다.
LOP_MODIFY_ROW 테이블의 행 수정을 의미한다.
LOP_DELETE_ROWS 테이블의 행 삭제를 의미한다.

 

 

 

 

1. 아무런 행위가 일어나기 전 트랜잭션 로그 결과

 

 

 

 

 

2. INSERT 구문으로 데이터 입력 후 트랜잭션 로그

 

INSERT INTO table_age VALUES (30)
GO
SELECT
	[Current LSN],
	[Operation],
	[Transaction ID],
	[AllocUnitId],
	[AllocUnitName],
	[Begin Time],
	[End TIme]
FROM fn_dblog (NULL, NULL)
WHERE AllocUnitName = 'dbo.table_age'

 

트랜잭션 로그 결과

 

 

 

 

3. UPDATE 구문으로 데이터 수정 후 트랜잭션 로그 결과

(4개의 행이 수정됐기 때문에 4개의 트랜잭션 로그가 발생)

 

UPDATE table_age SET age = 50
GO
SELECT
	[Current LSN],
	[Operation],
	[Transaction ID],
	[AllocUnitId],
	[AllocUnitName],
	[Begin Time],
	[End TIme]
FROM fn_dblog (NULL, NULL)
WHERE AllocUnitName = 'dbo.table_age'

 

트랜잭션 로그 결과

 

 

 

 

4. DELETE 구문으로 데이터 삭제 후 트랜잭션 로그 결과

(4개의 행이 삭제됐기 때문에 4개의 트랜잭션 로그 발생)

 

DELETE table_age
GO
SELECT
	[Current LSN],
	[Operation],
	[Transaction ID],
	[AllocUnitId],
	[AllocUnitName],
	[Begin Time],
	[End TIme]
FROM fn_dblog (NULL, NULL)
WHERE AllocUnitName = 'dbo.table_age'

 

트랜잭션 로그 결과

반응형