在过去 15 天内,我在 SQL Server 2008 R2 中的几个表上创建了一些新索引。
知道表名,是否可以确定最近 15 天内创建了哪些索引?
在过去 15 天内,我在 SQL Server 2008 R2 中的几个表上创建了一些新索引。
知道表名,是否可以确定最近 15 天内创建了哪些索引?
不是向后兼容性视图的忠实拥护者,例如sysindexes
因为您将无法永远依赖它们,并且因为其他答案中提出的联接过滤了表的创建日期,而不是索引。对于普通索引,SQL Server 根本不会记录创建索引的日期/时间(尽管您可以通过约束获得它)。
如果尚未推出 15 天,您可以在默认跟踪中找到此信息(以及创建索引的人,即使有约束也无法从元数据中获取):
USE your_database;
GO
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
HostName, LoginName, ApplicationName, StartTime, [Index] = ObjectName, IndexId
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 46
AND EventSubClass = 1
AND DatabaseName = DB_NAME()
AND ObjectID = OBJECT_ID('dbo.your_table_name')
AND IndexID IS NOT NULL
AND StartTime >= CONVERT(DATE, DATEADD(DAY, -15, GETDATE()))
ORDER BY EndTime DESC;
展望未来,您可以使用 DDL 触发器主动记录此信息,因此您不必争先恐后地依赖默认跟踪的年龄来审核这些活动......
尝试这个。
select crdate, i.name, object_name(o.id)
from sysindexes i
join sysobjects o ON o.id = i.id
where crdate >= getdate()-15