我想通过在 SQL Server 2005 中识别和删除未使用或长时间未访问(可能是过去 6 个月或 1 年)的视图和存储过程来清理我的数据库。
请帮忙。
我想通过在 SQL Server 2005 中识别和删除未使用或长时间未访问(可能是过去 6 个月或 1 年)的视图和存储过程来清理我的数据库。
请帮忙。
除非您在系统上 24/7 全天候运行跟踪并保留数据或使用 2008 年的审计机制,否则您无法做到 100%。
重新启动系统时所有数据将丢失,否则您可以通过以下查询找到特定对象的最后使用时间
select
DB_NAME(us.[database_id]) as [db],
OBJECT_NAME(us.[object_id],us.[database_id]) as [object],
MAX(us.[last_user_lookup]) as [last_user_lookup],
MAX(us.[last_user_scan]) as [last_user_scan],
MAX(us.[last_user_seek]) as [last_user_seek]
from sys.dm_db_index_usage_stats us
where us.[database_id] = DB_ID()
AND us.[object_id] = OBJECT_ID('tblname')
group by us.[database_id], us.[object_id];
根据@Koushick 的回答,我通过使用这个 .. 解决了它。
SELECT DB_NAME(us.[database_id]) AS [db],
OBJECT_NAME(us.[object_id], us.[database_id]) AS [object],
MAX(us.[last_user_lookup]) AS [last_user_lookup],
MAX(us.[last_user_scan]) AS [last_user_scan],
MAX(us.[last_user_seek]) AS [last_user_seek]
FROM sys.dm_db_index_usage_stats AS us
WHERE DB_NAME(us.[database_id]) = 'your database name'
AND OBJECT_NAME(us.[object_id], us.[database_id]) = 'your object'
GROUP BY us.[database_id], us.[object_id];
然后,您可以快速排序并使用日期来查看对象上次使用的时间,而不是上次修改对象的时间。
要找出早于特定日期的视图/存储过程,您可以使用以下查询
SELECT [name],create_date,modify_date
FROM sys.views (or sys.procedures)
WHERE modify_date<= 'date_older_than_you_want'
要找出未使用的视图,您可以使用以下查询:
SELECT [name],create_date,modify_date
FROM
sys.views
where create_date=modify_date