過去 15 日間に、SQL Server 2008 R2 のいくつかのテーブルにいくつかの新しいインデックスを作成しました。
テーブル名がわかれば、過去 15 日間に作成されたインデックスを特定できますか?
過去 15 日間に、SQL Server 2008 R2 のいくつかのテーブルにいくつかの新しいインデックスを作成しました。
テーブル名がわかれば、過去 15 日間に作成されたインデックスを特定できますか?
後方互換性ビューの大ファンではありませんsysindexes
。それらに永遠に依存することはできず、他の回答で提案されている結合はindexではなくtableの作成日にフィルターをかけるためです。通常のインデックスの場合、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