2013-09-04 1 views

ответ

3

Не большой поклонник отсталых взглядов совместимости как 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 для регистрации этой информации заранее, так что вам не придется бороться и полагаться на возраст следа по умолчанию для проверки этих мероприятий ...

+0

Aaron - Я попробовал ваш запрос, но он говорит: у вас нет разрешения на запуск «SYS.TRACES». Поэтому мне понадобится другой подход. Спасибо, Sunil – Sunil

+0

@ Суниль хорошо, может быть, это то, что вам нужно исправить. В конце концов, если вам не разрешено запрашивать sys.traces, вы, вероятно, заблокированы и от другого доступа к метаданным. –

+0

Aaron - Есть ли другой запрос, который я мог бы использовать? – Sunil

0

попробуйте это.

select crdate, i.name, object_name(o.id) 
from sysindexes i 
join sysobjects o ON o.id = i.id 
where crdate >= getdate()-15 
+1

по SQL Server ** 2005 ** и новее, вы должны использовать 'sys.indexes' из схемы каталога' sys' (а не старые, устаревшие представления 'sysindexes') –

+0

Это 'crdate' является датой создания« базового »объекта (напр. Таблица). –

+0

@marc_s это правда, за исключением того, что 'sys.indexes' больше не имеет соответствующей строки в' sys.objects' для регулярных индексов, поэтому вы не можете определить 'create_date' таким образом. Для стандартного индекса, который не является ограничением, лучшее, что вы получите от sys.objects (или sysobjects), - это дата создания таблицы, а не индекс, в любом случае. –

Смежные вопросы