1

過去 15 日間に、SQL Server 2008 R2 のいくつかのテーブルにいくつかの新しいインデックスを作成しました。

テーブル名がわかれば、過去 15 日間に作成されたインデックスを特定できますか?

4

2 に答える 2

3

後方互換性ビューの大ファンではありません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 トリガーを使用してこの情報をプロアクティブにログに記録できるため、これらのアクティビティを監査するために、デフォルトのトレースの経過時間をごちゃまぜにして頼る必要はありません...

于 2013-09-04T19:09:09.123 に答える
0

これを試して。

select crdate, i.name, object_name(o.id)
from sysindexes i
join sysobjects o ON o.id = i.id
where crdate >= getdate()-15
于 2013-09-04T18:57:19.530 に答える