특정 사용자에 대한 트랜잭션 로그 찾기
-
Version : SQL Server 2005, 2008, 2008R2, 2012, 2014
SQL Server에서 일어나는 모든 일은 트랜잭션 로그에 기록 된다. 이전에도 트랜잭션로그를 이용하여 삭제된 데이터를 복구하거나 트랜잭션 발생 시간 및 사용자 찾는 방법에 대해서 다룬적이 있다.
-
SQL Server 트랜잭션 로그 읽기 : http://sqlmvp.kr/140202102618
-
트랜잭션 로그 및 LSN을 이용한 삭제된 데이터 복구 : http://sqlmvp.kr/140206499367
-
SQL Server에서 Drop 및 Delete 사용자 찾기 : http://sqlmvp.kr/140202164558
-
변경된 테이블 이름 복구하기 : http://sqlmvp.kr/140203760440
이번 포스트는 특정 사용자에 대한 트랜잭션 로그를 찾는 법에 대해서 알아본다. 사용자 정보는 직접 로그를 검색하는데 사용할 수 없지만 모든 LOP_BEGI_XACT 로그 레코드는 트랜잭션을 실행하는 사람들의 SID를 포함한다. SID는 SUSER_SID 함수를 통해서 확인할 수 있다.
SELECT SUSER_SID ('KSW_2012_2\Administrator') AS [SID]; GO |
SID를 이용하여 fn_dblog() 또는 fn_dump_dblog에서 사용자를 필터할 수 있다.
SELECT [Current LSN], [Operation], [Transaction ID], [Begin Time], LEFT ([Description], 40) AS [Description] FROM fn_dblog (NULL, NULL) WHERE [Transaction SID] = SUSER_SID ('KSW_2012_2\Administrator'); GO |
하루에도 수 많은 트랜잭션로그가 발생하기 때문에 시간 범위를 좁혀서 특정 사용자의 트랜잭션 로그를 확인한다.
SELECT [Current LSN], [Operation], [Transaction ID], [Begin Time], LEFT ([Description], 40) AS [Description] FROM fn_dblog (NULL, NULL) WHERE [Transaction SID] = SUSER_SID ('KSW_2012_2\Administrator') AND ([Begin Time] > '2015/06/09 08:55:00:877' AND [Begin Time] < '2015/06/09 08:55:01:003'); GO |
범위가 좁혀진 트랜잭션 로그에서 Trasnaction ID 정보를 이용하여 트랜잭션 로그에서 삭제된 행에 대한 정보를 얻고 데이터를 복원할 수 있다.
[참고자료]
http://www.sqlskills.com/blogs/paul/finding-a-transaction-in-the-log-for-a-particular-user/
2015-06-09 / 강성욱 / http://sqlmvp.kr
SQL Server, mssql, 트랜잭션로그, 특정 사용자 트랜잭션로그 찾기, 특정 사용자 로그 보기, 사용자 로그 분석, SQL 로그분석, fn_dblog, fn_dump_dblog, DBA
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 데이터베이스 메일 계정 수정 (0) | 2015.07.23 |
---|---|
XEvent(확장이벤트)를 활용한 활성 로그 모니터링 하기 (0) | 2015.07.23 |
SQL Server I/O 서브시스템 레이턴시 확인 (0) | 2015.07.23 |
실행계획의 물리 및 논리연산자 설명 (0) | 2015.07.23 |
SQL Server Page Life Expectancy (PLE) (0) | 2015.07.23 |