{"id":542,"date":"2010-12-22T10:38:00","date_gmt":"2010-12-22T10:38:00","guid":{"rendered":"\/blogs\/jonathan\/post\/An-XEvent-a-Day-(22-of-31)-e28093-The-Future-e28093-fn_dblog()-No-More-Tracking-Transaction-Log-Activity-in-Denali.aspx"},"modified":"2017-04-13T12:18:30","modified_gmt":"2017-04-13T16:18:30","slug":"an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/","title":{"rendered":"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali"},"content":{"rendered":"<p>I bet that made you look didn\u2019t it?&#160; Worry not, fn_dblog() still exists in SQL Server Denali, and I plan on using it to validate the information being returned by a new Event in SQL Server Denali CTP1, sqlerver.transaction_log, which brings with it the ability to correlate specific transaction log entries to the operations that actually caused them to occur.<\/p>\n<p>There is no greater source of information about the transaction log in SQL Server than Paul Randal\u2019s blog category <a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/category\/transaction-log\/\" target=\"_blank\">Transaction Log<\/a>.&#160; It is also listed as the referenced <a href=\"https:\/\/dynamicevents.emeetingsonline.com\/emeetings\/dynamicevents\/290\/MCM_SQL2008_Pre-reading_v3.pdf\" target=\"_blank\">pre-reading material for the Microsoft SQL Server MCM<\/a> program Logging, Recovery, Log Maintenance topic.&#160; In a number of his blog posts, Paul shows how to look at the transaction log by using an undocumented system function fn_dblog().&#160; Note that I said it is undocumented, meaning its use is not supported by Microsoft, its functionality is subject to change at any point in time without notification, and its use is at your own risk.&#160; Is it safe to use?&#160; That\u2019s a topic that is up for debate, but at the end of the day if you were to have a problem associated with its use you are on your own because its undocumented.<\/p>\n<p>Why does any of this matter?&#160; It matters because there is a lot of information that we can learn about the internal operations of SQL Server from the log operations that occur as the result of changes in our database.&#160; Some examples of this would be:<\/p>\n<p><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/a-sql-server-dba-myth-a-day-1930-truncate-table-is-non-logged\/\">A SQL Server DBA myth a day: (19\/30) TRUNCATE TABLE is non-logged<\/a>     <br \/><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/benchmarking-1-tb-table-population-part-2-optimizing-log-block-io-size-and-how-log-io-works\/\">Benchmarking: 1-TB table population (part 2: optimizing log block IO size and how log IO works)<\/a>     <br \/><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/lock-logging-and-fast-recovery\/\">Lock logging and fast recovery<\/a>     <br \/><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/how-do-checkpoints-work-and-what-gets-logged\/\">How do checkpoints work and what gets logged<\/a>     <br \/><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/finding-out-who-dropped-a-table-using-the-transaction-log\/\">Finding out who dropped a table using the transaction log<\/a><\/p>\n<p>Admittedly this isn\u2019t necessarily information that you would start a conversation with at a party, unless of course you are surrounded by other <strike>ubergeeks<\/strike> SQL Server internal junkies, and its not really the kind of information that I use day to day in my work as a Database Administrator.&#160; Prior to the introduction of Extended Events, some information about how SQL Server operated was only available inside of the transaction log records, and I am sure that there are still some items that you can only see inside of the log records.&#160; Microsoft obviously recognized a demand to look the log operations generated by SQL Server in a supported fashion and added this functionality to Extended Events.<\/p>\n<p>The sqlserver.transaction_log Event returns 10 data elements in its payload, which can be found in the sys.dm_xe_object_columns DMV.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">SELECT \r\n    <\/span>oc<span style=\"color: gray\">.<\/span>name<span style=\"color: gray\">, \r\n    <\/span>oc<span style=\"color: gray\">.<\/span><span style=\"color: magenta\">type_name<\/span><span style=\"color: gray\">, \r\n    <\/span>oc<span style=\"color: gray\">.<\/span><span style=\"color: blue\">description\r\nFROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_xe_packages <\/span><span style=\"color: blue\">AS <\/span>p\r\n<span style=\"color: gray\">INNER JOIN <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_xe_objects <\/span><span style=\"color: blue\">AS <\/span>o\r\n    <span style=\"color: blue\">ON <\/span>p<span style=\"color: gray\">.<\/span><span style=\"color: blue\">guid <\/span><span style=\"color: gray\">= <\/span>o<span style=\"color: gray\">.<\/span>package_guid\r\n<span style=\"color: gray\">INNER JOIN <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_xe_object_columns <\/span><span style=\"color: blue\">AS <\/span>oc\r\n    <span style=\"color: blue\">ON <\/span>oc<span style=\"color: gray\">.<\/span><span style=\"color: magenta\">object_name <\/span><span style=\"color: gray\">= <\/span>o<span style=\"color: gray\">.<\/span>name\r\n        <span style=\"color: gray\">AND <\/span>oc<span style=\"color: gray\">.<\/span>object_package_guid <span style=\"color: gray\">= <\/span>o<span style=\"color: gray\">.<\/span>package_guid\r\n<span style=\"color: blue\">WHERE <\/span>o<span style=\"color: gray\">.<\/span>name <span style=\"color: gray\">= <\/span><span style=\"color: red\">'transaction_log'\r\n  <\/span><span style=\"color: gray\">AND <\/span>oc<span style=\"color: gray\">.<\/span>column_type <span style=\"color: gray\">= <\/span><span style=\"color: red\">'data'<\/span><\/pre>\n<\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/2888578a\/image.png\" target=\"_blank\"><img fetchpriority=\"high\" decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png\" width=\"644\" height=\"198\" \/><\/a> <\/p>\n<\/blockquote>\n<p>The operation and context elements have corresponding Maps in sys.dm_xe_map_values that provide the different Log Operations and Contexts that are available through Extended Events.&#160; There are currently 70 Log Operations and 29 Contexts for those operations available in SQL Server Denali CTP1.&#160; <\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">SELECT \r\n    <\/span>name<span style=\"color: gray\">,\r\n    <\/span>map_key<span style=\"color: gray\">,\r\n    <\/span>map_value\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span><span style=\"color: green\">dm_xe_map_values\r\n<\/span><span style=\"color: blue\">WHERE <\/span>name <span style=\"color: gray\">in (<\/span><span style=\"color: red\">'log_op'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'log_context'<\/span><span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">ORDER BY <\/span>name<span style=\"color: gray\">, <\/span>map_key<\/pre>\n<p>  <a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><\/p><\/blockquote>\n<p>To show how this Event can be used, we\u2019ll first create a database named TransactionLogDemo, and then switch our connection to that database.&#160; We\u2019ll then create an table that will be used to generate some Transaction Log events.&#160; We\u2019ll create our Event Session to capture the sqlserver.sql_statement_starting, sqlserver.sql_statement_completed, and sqlserver.transaction_log Events and we\u2019ll add a Predicate to each Event to only fire for the TransactionLogDemo database.&#160; To add the Predicate dynamically, we\u2019ll use Dynamic SQL to create our Event Session since inline parameters cannot be used in the CREATE EVENT SESSION DDL.&#160; <\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">CREATE DATABASE <\/span>TransactionLogDemo\r\n<span style=\"color: blue\">GO\r\nUSE <\/span>TransactionLogDemo\r\n<span style=\"color: blue\">GO\r\nCREATE TABLE <\/span>CreateLogRecords\r\n<span style=\"color: gray\">(<\/span>RowID <span style=\"color: blue\">int identity primary key<\/span><span style=\"color: gray\">,\r\n <\/span>RowData <span style=\"color: blue\">nvarchar<\/span><span style=\"color: gray\">(<\/span>120<span style=\"color: gray\">))\r\n<\/span><span style=\"color: blue\">GO\r\nDECLARE <\/span>@sqlcmd <span style=\"color: blue\">nvarchar<\/span><span style=\"color: gray\">(<\/span>2000<span style=\"color: gray\">) = <\/span><span style=\"color: red\">'\r\nCREATE EVENT SESSION TransactionLogDemo\r\nON SERVER\r\nADD EVENT sqlserver.page_reference_tracker,\r\nADD EVENT sqlserver.sql_statement_starting\r\n( ACTION(sqlserver.sql_text)\r\n  WHERE (sqlserver.database_id = '<\/span><span style=\"color: gray\">+ <\/span><span style=\"color: magenta\">cast<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">DB_ID<\/span><span style=\"color: gray\">() <\/span><span style=\"color: blue\">as varchar<\/span><span style=\"color: gray\">(<\/span>3<span style=\"color: gray\">))+<\/span><span style=\"color: red\">')\r\n),\r\nADD EVENT sqlserver.sql_statement_completed\r\n( ACTION(sqlserver.sql_text)\r\n  WHERE (sqlserver.database_id = '<\/span><span style=\"color: gray\">+ <\/span><span style=\"color: magenta\">cast<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">DB_ID<\/span><span style=\"color: gray\">() <\/span><span style=\"color: blue\">as varchar<\/span><span style=\"color: gray\">(<\/span>3<span style=\"color: gray\">))+<\/span><span style=\"color: red\">')\r\n),\r\nADD EVENT sqlserver.transaction_log\r\n( WHERE (sqlserver.database_id = '<\/span><span style=\"color: gray\">+ <\/span><span style=\"color: magenta\">cast<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">DB_ID<\/span><span style=\"color: gray\">() <\/span><span style=\"color: blue\">as varchar<\/span><span style=\"color: gray\">(<\/span>3<span style=\"color: gray\">))+<\/span><span style=\"color: red\">'))\r\nADD TARGET package0.asynchronous_file_target(\r\n     SET filename=''C:\\SQLBlog\\TransactionLogDemoDenali.xel'',\r\n         metadatafile=''C:\\SQLBlog\\TransactionLogDemoDenali.xem'')\r\nWITH (MAX_MEMORY = 4MB, EVENT_RETENTION_MODE = NO_EVENT_LOSS, TRACK_CAUSALITY = ON )'\r\n<\/span><span style=\"color: blue\">EXEC <\/span><span style=\"color: gray\">(<\/span>@sqlcmd<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">GO\r\nCHECKPOINT\r\nGO\r\n<\/span><span style=\"color: green\">-- Start the Event Session\r\n<\/span><span style=\"color: blue\">ALTER EVENT SESSION <\/span>TransactionLogDemo\r\n<span style=\"color: blue\">ON SERVER\r\nSTATE<\/span><span style=\"color: gray\">=<\/span>START\r\n<span style=\"color: blue\">GO<\/span><\/pre>\n<p>  <a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><\/p><\/blockquote>\n<p>Once the Event Session is created, we\u2019ll call CHECKPOINT on the database so that the log can truncate (you did create the database in SIMPLE recovery right?) and clear allowing our later call to fn_dblog() to only return the log records specific to the operations that occur after the CHECKPOINT.&#160; We\u2019ll start our Event Session, and then insert 20 rows into the CreateLogRecords table, and then immediately delete all of the rows from the table, and stop our Event Session to end the collection of Events.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">INSERT INTO <\/span>CreateLogRecords <span style=\"color: gray\">(<\/span>RowData<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">SELECT <\/span><span style=\"color: magenta\">REPLICATE<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">'abc123'<\/span><span style=\"color: gray\">, <\/span>20<span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">FROM master<\/span><span style=\"color: gray\">.<\/span>dbo<span style=\"color: gray\">.<\/span>spt_values a\r\n<span style=\"color: blue\">WHERE <\/span>a<span style=\"color: gray\">.<\/span><span style=\"color: blue\">type <\/span><span style=\"color: gray\">= <\/span><span style=\"color: red\">'P'\r\n  <\/span><span style=\"color: gray\">AND <\/span>a<span style=\"color: gray\">.<\/span>number <span style=\"color: gray\">&lt; <\/span>20\r\n<span style=\"color: blue\">GO\r\nDELETE <\/span>CreateLogRecords\r\n<span style=\"color: blue\">GO\r\n<\/span><span style=\"color: green\">-- Disable the Event Session\r\n<\/span><span style=\"color: blue\">ALTER EVENT SESSION <\/span>TransactionLogDemo\r\n<span style=\"color: blue\">ON SERVER\r\nSTATE<\/span><span style=\"color: gray\">=<\/span><span style=\"color: blue\">STOP\r\nGO<\/span><\/pre>\n<p>  <a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><\/p><\/blockquote>\n<p>Once this is done, we can now query the package0.asynchronous_file_target to get our Event data from Extended Events, and then at the same time query fn_dblog() to get the log records from the Transaction Log as well so that we can validate what we\u2019ve collected in our Event Session.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: green\">-- Fetch the Event Data from the Event Session Target\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/@name)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>event_name<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">DATEADD<\/span><span style=\"color: gray\">(<\/span>hh<span style=\"color: gray\">, \r\n            <\/span><span style=\"color: magenta\">DATEDIFF<\/span><span style=\"color: gray\">(<\/span>hh<span style=\"color: gray\">, <\/span><span style=\"color: magenta\">GETUTCDATE<\/span><span style=\"color: gray\">(), <\/span><span style=\"color: magenta\">CURRENT_TIMESTAMP<\/span><span style=\"color: gray\">), \r\n            <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/@timestamp)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'datetime2'<\/span><span style=\"color: gray\">)) <\/span><span style=\"color: blue\">AS <\/span>[timestamp]<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">COALESCE<\/span><span style=\"color: gray\">(<\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;database_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">), \r\n             <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;database_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">)) <\/span><span style=\"color: blue\">AS <\/span>database_id<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;index_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[index_id]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;object_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[object_id]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;transaction_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[transaction_id]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;log_record_size&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[log_record_size]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;operation&quot;]\/text)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[operation]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;context&quot;]\/text)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[context]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;transaction_start_time&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'datetime2'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[transaction_start_time]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/data[@name=&quot;replication_command&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'int'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[replication_command]<span style=\"color: gray\">,\r\n    <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;sql_text&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(1000)'<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>[sql_text]<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">SUBSTRING<\/span><span style=\"color: gray\">(<\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;attach_activity_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">), <\/span>1<span style=\"color: gray\">, <\/span>36<span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS uniqueidentifier<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">as <\/span>activity_id<span style=\"color: gray\">,\r\n    <\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">SUBSTRING<\/span><span style=\"color: gray\">(<\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;attach_activity_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">), <\/span>38<span style=\"color: gray\">, <\/span>10<span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS int<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">as <\/span>event_sequence\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: gray\">(\r\n    <\/span><span style=\"color: blue\">SELECT <\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span>event_data <span style=\"color: blue\">AS XML<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span>XEvent\r\n    <span style=\"color: blue\">FROM <\/span><span style=\"color: green\">sys<\/span><span style=\"color: gray\">.<\/span>fn_xe_file_target_read_file<span style=\"color: gray\">(<\/span><span style=\"color: red\">'C:\\SQLBlog\\TransactionLogDemoDenali*.xel'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'C:\\SQLBlog\\TransactionLogDemoDenali*.xem'<\/span><span style=\"color: gray\">, null, null)) <\/span><span style=\"color: blue\">as <\/span>src\r\n<span style=\"color: blue\">ORDER BY \r\n    <\/span><span style=\"color: magenta\">DATEADD<\/span><span style=\"color: gray\">(<\/span>hh<span style=\"color: gray\">, \r\n            <\/span><span style=\"color: magenta\">DATEDIFF<\/span><span style=\"color: gray\">(<\/span>hh<span style=\"color: gray\">, <\/span><span style=\"color: magenta\">GETUTCDATE<\/span><span style=\"color: gray\">(), <\/span><span style=\"color: magenta\">CURRENT_TIMESTAMP<\/span><span style=\"color: gray\">), \r\n            <\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/@timestamp)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'datetime2'<\/span><span style=\"color: gray\">)),\r\n    <\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">SUBSTRING<\/span><span style=\"color: gray\">(<\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;attach_activity_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">), <\/span>1<span style=\"color: gray\">, <\/span>36<span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS uniqueidentifier<\/span><span style=\"color: gray\">),\r\n    <\/span><span style=\"color: magenta\">CAST<\/span><span style=\"color: gray\">(<\/span><span style=\"color: magenta\">SUBSTRING<\/span><span style=\"color: gray\">(<\/span>XEvent<span style=\"color: gray\">.<\/span>value<span style=\"color: gray\">(<\/span><span style=\"color: red\">'(event\/action[@name=&quot;attach_activity_id&quot;]\/value)[1]'<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">'varchar(50)'<\/span><span style=\"color: gray\">), <\/span>38<span style=\"color: gray\">, <\/span>10<span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS int<\/span><span style=\"color: gray\">)\r\n<\/span><span style=\"color: blue\">GO\r\n\r\n<\/span><span style=\"color: green\">-- Fetch Log records from log for comparison\r\n<\/span><span style=\"color: blue\">SELECT \r\n    <\/span>[Xact ID] <span style=\"color: blue\">as <\/span>transaction_id<span style=\"color: gray\">, \r\n    <\/span>[Log Record Fixed Length] <span style=\"color: blue\">as <\/span>log_record_size<span style=\"color: gray\">, \r\n    <\/span>[Operation] <span style=\"color: blue\">as <\/span>operation<span style=\"color: gray\">, \r\n    <\/span><span style=\"color: magenta\">SUBSTRING<\/span><span style=\"color: gray\">(<\/span>[context]<span style=\"color: gray\">, <\/span>5<span style=\"color: gray\">, <\/span><span style=\"color: magenta\">LEN<\/span><span style=\"color: gray\">(<\/span>context<span style=\"color: gray\">)) <\/span><span style=\"color: blue\">as <\/span>context<span style=\"color: gray\">, \r\n    <\/span>[Begin Time]\r\n<span style=\"color: blue\">FROM <\/span><span style=\"color: green\">fn_dblog<\/span><span style=\"color: gray\">(null, null) \r\n<\/span><span style=\"color: blue\">GO<\/span><\/pre>\n<p>  <a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><\/p><\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/06504c04\/image.png\" target=\"_blank\"><img decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/7a4e5bcf\/image_thumb.png\" width=\"644\" height=\"308\" \/><\/a> <\/p>\n<\/blockquote>\n<p>When we look at the output of the above two queries, first you\u2019ll note that there are four log records that don\u2019t have associated records in our Extended Event Session.&#160; These are the log records generated by the CHECKPOINT operation and the ALTER EVENT SESSION command and occurred before the Event Session was actually collecting data.&#160; The first two LOP_BEGIN_XACT records in the Event Session correspond to the transaction_id of the log records returned in rows 5 and 6 of the fn_dblog() output, but if you notice the Event Session is missing the transaction_start_time for the log operations, something I believe to be a bug in Denali CTP1 and which I\u2019ve submitted a Connect item for (<a href=\"https:\/\/connect.microsoft.com\/SQLServer\/feedback\/details\/631373\/denali-transaction-log-extended-event-returning-incorrect-data\">Denali &#8211; Transaction_Log Extended Event Returning Incorrect Data<\/a>).&#160; <\/p>\n<p>On quick glance it appears that all of our log records are in the same order, but if we look at more closely, there is a LOP_MODIFY_ROW operation that is missing from our Event Session, but exists inside of the fn_dblog() output.<\/p>\n<blockquote>\n<p><a href=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/6418407d\/image.png\" target=\"_blank\"><img decoding=\"async\" style=\"border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" title=\"image\" border=\"0\" alt=\"image\" src=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/37fb438c\/image_thumb.png\" width=\"644\" height=\"345\" \/><\/a> <\/p>\n<\/blockquote>\n<p>If you scroll down further, you\u2019ll also see that there are two missing log records for the delete as well, LOP_MODIFY_HEAP and LOP_SET_BITS with a context of PFS.&#160; However, the Extended Event Session captures the lock logging for the ALTER EVENT SESSION command that stopped the Event collection, whereas the output from fn_dblog() does not show that.<\/p>\n<p>To cleanup from this Event Session, the following code can be run.<\/p>\n<blockquote>\n<pre class=\"code\"><span style=\"color: blue\">USE master\r\nGO\r\nDROP DATABASE <\/span>TransactionLogDemo\r\n<span style=\"color: blue\">GO\r\nDROP EVENT SESSION <\/span>TransactionLogDemo\r\n<span style=\"color: blue\">ON SERVER\r\nGO\r\nEXECUTE <\/span><span style=\"color: maroon\">sp_configure <\/span><span style=\"color: red\">'show advanced options'<\/span><span style=\"color: gray\">, <\/span>1\r\n<span style=\"color: blue\">GO\r\nRECONFIGURE\r\nGO\r\nEXECUTE <\/span><span style=\"color: maroon\">sp_configure <\/span><span style=\"color: red\">'xp_cmdshell'<\/span><span style=\"color: gray\">, <\/span>1\r\n<span style=\"color: blue\">GO\r\nRECONFIGURE\r\nGO\r\nEXEC <\/span><span style=\"color: maroon\">xp_cmdshell <\/span><span style=\"color: red\">'DEL C:\\SQLBlog\\TransactionLogDemoDenali*'\r\n<\/span><span style=\"color: blue\">GO\r\nEXECUTE <\/span><span style=\"color: maroon\">sp_configure <\/span><span style=\"color: red\">'xp_cmdshell'<\/span><span style=\"color: gray\">, <\/span>0\r\n<span style=\"color: blue\">GO\r\nRECONFIGURE\r\nGO\r\nEXECUTE <\/span><span style=\"color: maroon\">sp_configure <\/span><span style=\"color: red\">'show advanced options'<\/span><span style=\"color: gray\">, <\/span>0\r\n<span style=\"color: blue\">GO\r\nRECONFIGURE\r\nGO<\/span><\/pre>\n<p>  <a href=\"http:\/\/www.11011.net\/software\/vspaste\"><\/a><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>I bet that made you look didn\u2019t it?&#160; Worry not, fn_dblog() still exists in SQL Server Denali, and I plan on using it to validate the information being returned by a new Event in SQL Server Denali CTP1, sqlerver.transaction_log, which brings with it the ability to correlate specific transaction log entries to the operations that [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,38,45],"tags":[],"class_list":["post-542","post","type-post","status-publish","format-standard","hentry","category-extended-events","category-sql-server-2008","category-xevent-a-day-series"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali - Jonathan Kehayias<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"I bet that made you look didn\u2019t it?&#160; Worry not, fn_dblog() still exists in SQL Server Denali, and I plan on using it to validate the information being returned by a new Event in SQL Server Denali CTP1, sqlerver.transaction_log, which brings with it the ability to correlate specific transaction log entries to the operations that [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-22T10:38:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:18:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png\" \/>\n<meta name=\"author\" content=\"Jonathan Kehayias\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kehayias\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali\",\"datePublished\":\"2010-12-22T10:38:00+00:00\",\"dateModified\":\"2017-04-13T16:18:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/\"},\"wordCount\":1003,\"commentCount\":8,\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windowslivewriter\\\/anxeventaday22of31thefuturefn_dblognomor\\\/038a9711\\\/image_thumb.png\",\"articleSection\":[\"Extended Events\",\"SQL Server 2008\",\"XEvent a Day Series\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/\",\"name\":\"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windowslivewriter\\\/anxeventaday22of31thefuturefn_dblognomor\\\/038a9711\\\/image_thumb.png\",\"datePublished\":\"2010-12-22T10:38:00+00:00\",\"dateModified\":\"2017-04-13T16:18:30+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windowslivewriter\\\/anxeventaday22of31thefuturefn_dblognomor\\\/038a9711\\\/image_thumb.png\",\"contentUrl\":\"https:\\\/\\\/www.SQLskills.com\\\/blogs\\\/jonathan\\\/wp-content\\\/uploads\\\/windowslivewriter\\\/anxeventaday22of31thefuturefn_dblognomor\\\/038a9711\\\/image_thumb.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extended Events\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/extended-events\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\",\"name\":\"Jonathan Kehayias - The Rambling DBA\",\"description\":\"The Rambling DBA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\",\"name\":\"Jonathan Kehayias\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"caption\":\"Jonathan Kehayias\"},\"sameAs\":[\"http:\\\/\\\/3.209.169.194\\\/blogs\\\/jonathan\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali - Jonathan Kehayias","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/","og_locale":"en_US","og_type":"article","og_title":"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali - Jonathan Kehayias","og_description":"I bet that made you look didn\u2019t it?&#160; Worry not, fn_dblog() still exists in SQL Server Denali, and I plan on using it to validate the information being returned by a new Event in SQL Server Denali CTP1, sqlerver.transaction_log, which brings with it the ability to correlate specific transaction log entries to the operations that [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/","og_site_name":"Jonathan Kehayias","article_published_time":"2010-12-22T10:38:00+00:00","article_modified_time":"2017-04-13T16:18:30+00:00","og_image":[{"url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png","type":"","width":"","height":""}],"author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali","datePublished":"2010-12-22T10:38:00+00:00","dateModified":"2017-04-13T16:18:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/"},"wordCount":1003,"commentCount":8,"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png","articleSection":["Extended Events","SQL Server 2008","XEvent a Day Series"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/","name":"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#primaryimage"},"thumbnailUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png","datePublished":"2010-12-22T10:38:00+00:00","dateModified":"2017-04-13T16:18:30+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#primaryimage","url":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png","contentUrl":"https:\/\/www.SQLskills.com\/blogs\/jonathan\/wp-content\/uploads\/windowslivewriter\/anxeventaday22of31thefuturefn_dblognomor\/038a9711\/image_thumb.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-22-of-31-the-future-fn_dblog-no-more-tracking-transaction-log-activity-in-denali\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Extended Events","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/extended-events\/"},{"@type":"ListItem","position":3,"name":"An XEvent a Day (22 of 31) \u2013 The Future \u2013 fn_dblog() No More? Tracking Transaction Log Activity in Denali"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/","name":"Jonathan Kehayias - The Rambling DBA","description":"The Rambling DBA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c","name":"Jonathan Kehayias","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","caption":"Jonathan Kehayias"},"sameAs":["http:\/\/3.209.169.194\/blogs\/jonathan"]}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/comments?post=542"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/542\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}