列出所有对象和相关活动SQL Server 2008R2

时间:2018-05-12 01:39:54

标签: sql-server-2008-r2

有没有办法列出服务器(所有数据库)及其活动的所有对象?

我的意思是活动:

  • 如果一个对象是一个表/视图,我想知道上次是什么 得到更新或访问此表。
  • 如果一个对象是一个函数,我想知道上次使用的函数。
  • 如果对象是存储的 程序,我想知道上次执行。

目标是消除一些未使用的对象或至少识别它们,以便我们进一步分析它。如果有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:2)

如果您的代码中没有特定的审核或显式日志记录说明,您可能很难实现。

以下是一些提示,在我看来,可以帮助您检索所需的信息:

  1. 表/视图您可以依赖记录索引信息的动态管理视图:sys.dm_db_index_usage_stats(更多信息here

    SELECT last_user_update, *
    FROM sys.dm_db_index_usage_stats
    WHERE database_id = DB_ID('YourDBName')
    AND OBJECT_ID = OBJECT_ID('[YourDBName].[dbo].[YourTableName]') 
    
  2. 存储过程如果仍然缓存SP执行,您可以查询sys.dm_exec_procedure_stats(更多信息here

    select last_execution_time, * 
    from sys.dm_exec_procedure_stats
    WHERE database_id = DB_ID('YourDBName')
    AND OBJECT_ID = OBJECT_ID('[YourDBName].[dbo].[YourSpName]')
    
  3. 功能如果仍然缓存了功能执行,您可以查询sys.dm_exec_query_stats(来自this精彩回答),更多信息here

    SELECT qs.last_execution_time
    FROM sys.dm_exec_query_stats qs
       CROSS APPLY (SELECT 1 AS X
        FROM sys.dm_exec_plan_attributes(qs.plan_handle)
        WHERE  ( attribute = 'objectid' 
                 AND value = OBJECT_ID('[YourDBName].[dbo].[YourFunctionName]') )
                OR ( attribute = 'dbid' 
                     AND value = DB_ID('YourDBName') )
        HAVING COUNT(*) = 2) CA