![]() |
|
|
|
By: Sankar Reddy | Read Comments (5) | Print Sankar is a Database Engineer/DBA and SQL Server MVP. He has been working with SQL Server since 2003 in a variety of roles. Related Tips: More |
|
Problem
We are migrating our enterprise from SQL Server 2000/SQL Server 2005 to SQL Server 2008. I have heard that many features are deprecated in SQL Server 2008. How do I check our enterprise SQL Server code to find out if it is free from the deprecated features listed in SQL Server 2008? Do we have to manually check each line of code? Is there an automated way of identifying the deprecated SQL code?
Solution
In SQL Server 2008, deprecated features can be identified using two different methods. First is with SQL Profiler and second is with Extended Events. Extended Events are a new mechanism introduced in SQL Server 2008 that allows more granular monitoring than was impossible in prior SQL Server versions. In this tip, we will use Extended Events because they are simple to setup and provide great deal of insight into the database engine.
| --Find the event name that allows tracking the deprecation features SELECT xo.name, xo.description, * FROM sys.dm_xe_objects xo INNER JOIN sys.dm_xe_packages xp ON xp.[guid] = xo.[package_guid] WHERE xo.[object_type] = 'event' AND xo.name LIKE '%deprecation%' ORDER BY xp.[name]; GO /* --Find the additional columns that can be tracked FROM sys.dm_xe_objects xo INNER JOIN sys.dm_xe_packages xp ON xp.[guid] = xo.[package_guid] WHERE xo.[object_type] = 'action' ORDER BY xp.[name]; GO --Find the columns that are available to track for the WHERE [object_name] = 'deprecation_announcement'; GO --Find the columns that are available to track for the WHERE [object_name] = 'deprecation_final_support'; GO |
| --Create the event CREATE EVENT SESSION Monitor_Deprecated_Discontinued_features ON SERVER --We are looking at deprecated features ( --Add additional columns to track ACTION (sqlserver.database_id, sqlserver.sql_text, sqlserver.session_id, sqlserver.tsql_stack, sqlserver.username, sqlserver.client_hostname, sqlserver.database_context) ), --We are looking at discontinued features --As a best practice use asynchronous file target, reduces overhead. SET filename='c:\Monitor_Deprecated_Discontinued_features.etl', metadatafile='c:\Monitor_Deprecated_Discontinued_features.mta') GO --Now start the session STATE = START; GO |
| USE AdventureWorks; GO --String alias FROM Person.Person GO --# table name GO --3 part column name FROM Person.Person SELECT TOP 1 Person.Person.LastName, * FROM Person.Person GO --use :: for function calls GO --using hints without WITH keyword GO --use fn_get_sql SELECT @Handle = sql_handle FROM sys.dm_exec_requests WHERE session_id = @@SPID AND request_id = 0; SELECT * FROM sys.fn_get_sql(@Handle); GO |
Once the script is completed, let's take a look to see if the Extended events captured any of the deprecated features.
| SELECT FinalData.R.value ('@name', 'nvarchar(50)') AS EventName, FinalData.R.value ('@timestamp', 'nvarchar(50)') AS TIMESTAMP, FinalData.R.value ('data(data/value)[1]', 'nvarchar(500)') AS Feature, FinalData.R.value ('data(data/value)[2]', 'nvarchar(500)') AS MESSAGE, FinalData.R.value ('(action/.)[1]', 'nvarchar(50)') AS DatabaseID, FinalData.R.value ('(action/.)[2]', 'nvarchar(50)') AS SQLText, FinalData.R.value ('(action/.)[3]', 'nvarchar(50)') AS SessionID FROM ( SELECT CONVERT(XML, event_data) AS xmldata FROM sys.fn_xe_file_target_read_file ('c:\Monitor_Deprecated_Discontinued_features*.etl', 'c:\Monitor_Deprecated_Discontinued_features*.mta', NULL, NULL) ) AsyncFileData CROSS APPLY xmldata.nodes ('//event') AS FinalData (R) ORDER BY TIMESTAMP, Feature ASC GO |
Here is a screen shot from the results.

|
Next Steps
| Share: | Share | Tweet |
|
![]() |
![]() |
Free SQL Server Learning |
| Tuesday, October 13, 2009 - 4:48:36 PM - grobido | Read The Tip |
|
This is a great tip. It is nice to know you can get this data from the database. This will be very helpful when upgrading. |
|
| Tuesday, October 13, 2009 - 5:11:45 PM - SankarReddy | Read The Tip |
|
Thanks. Extended Events is a new and exciting framework to track and monitor events in SQL Server 2008 without impacting the performance like Profiler does. I am glad this tip is helpful and hope others will pick up using XE. It is easy to setup and trace the events in XE. |
|
| Friday, October 16, 2009 - 7:59:19 AM - admin | Read The Tip |
|
Sankar, I concur this is a good tip. Could you write a tip just on extended events in the future? Perhaps a beginner's tip on the concepts, syntax and options? I think community members new to extended events could benefit from a basic explanation. I think both of your tips (http://www.mssqltips.com/tip.asp?tip=1853 and http://www.mssqltips.com/tip.asp?tip=1857) on extended events are great, but if someone has not used this technique before they may not know how to apply the concepts to other scenarios. Thank you again for your many contributions to the community! Thank you, |
|
| Friday, October 16, 2009 - 12:39:03 PM - SankarReddy | Read The Tip |
|
I will come up with few beginner tips on XE soon. |
|
| Monday, April 09, 2012 - 3:59:26 PM - MaryKDBA | Read The Tip |
|
This example is giving me inconsistent results. I clear all the objects and start a new session. The example will return me some results and not others, and then the next time I will get different results than I got the previous time. Any idea why? |
|
|
privacy | disclaimer | copyright | advertise | about authors | contribute | feedback | giveaways | user groups Some names and products listed are the registered trademarks of their respective owners. Edgewood Solutions LLC | MSSharePointTips.com | MSSQLTips.com |