SQL: How to read Transaction Log File
Today morning, one of my colleague came to my desk with an interesting question. “Is there any way to read SQL T-Log file?” I did not have idea about it I searched on google and I found an un-documented functions which is used to read T-Log file. Using this function, we can get list of all transaction performed on database. Function name is fn_dblog() (Formally known as DBCC command).
The fn_dblog() will accept two parameters:
- Starting log sequence number (LSN). We can specify null, it will return everything from start of log.
- Ending log sequence number (LSN). We can specify null, it will return everything to end of the log.
Demo Code:
01.Create Database SampleDatabase
02.Go
03.use SampleDatabase
04.GO
05.Create Table Inventory
06.(
07. ID Int identity (1,1),
08. ProductName varchar(100),
09. Quantity int
10.)
11.Insert into Inventory(ProductName,Quantity) values ('Soap',10),('Tooth Paste',20)
I have created new database named “SampleDatabase”. Then I created new table called “Inventory” and insert some values in table.
Now I want to get all the transaction (Insert, Update, Delete, create Table) performed by on database. So, I can run below query.
01.SELECT [Current LSN]
02. ,[Operation]
03. ,[Transaction ID]
04. ,AllocUnitName
05. ,[Transaction Name]
06. ,[Transaction SID]
07. , SUSER_SNAME([Transaction SID]) AS DBUserName
08. ,[Begin Time]
09. ,[Lock Information]
10.FROM fn_dblog(NULL, NULL)
11.WHERE SUSER_SNAME([Transaction SID]) = 'Nisarg-PC/Nisarg'
12.AND [Transaction Name] in ('CREATE TABLE','Insert','Delete')
In above code, you can see I used the fn_dblog function in the “FROM” clause. I also used the “WHERE” predicate to return only transaction log rows that involved a CREATE TABLE, INSERT and/or DELETE transaction created by database user Nisarg-PC\Nisarg.
This function is undocumented and you should use it with caution.