Отменить изменения, сделанные при настройке базы данных SQL Server - PullRequest
3 голосов
/ 30 августа 2010

Я не уверен, что этот вопрос можно задать здесь или ошибка сервера.Мне было интересно ... Есть ли способ быстро отменить изменения, сделанные SQL Server 2005 Tuning Advsor, кроме восстановления из резервной копии?

Ответы [ 3 ]

5 голосов
/ 31 октября 2012

Существует способ, если вы не переименовали их, как правило, для созданных объектов Database Tuning Advisor добавляется _dta

enter image description here

чтобы вы могли просмотреть их, запустив этот запрос

ДЛЯ индексов

SELECT        
*
FROM            
sys.indexes where name like '_dta%'

СО Статистика

SELECT
*
FROM 
sys.stats where name like '_dta%'

И оттуда, я думаю, вы знали бы, какие предметы бросить

2 голосов
/ 31 октября 2012

Нет официальной ссылки ОТМЕНИТЬ эту операцию, точно так же как не будет официальной рекомендации по восстановлению из DROP DATABASE. Ответственный администратор базы данных просто так не делает.

Если вы только что сделали это и были довольны триггером, скорее всего, вы оставили имена по умолчанию - это очень помогает. Ответ Раймунда почти там. Но если вы сделали это с течением времени, то вам не хотелось бы отменять всю хорошую статистику и индексы. Вторая часть головоломки - проверить, когда индексы обновлялись в последний раз. Если вы только что сделали это несколько минут назад, что является хорошим временем для UNDO, проверьте этот запрос, чтобы получить индексы и статистику, которые только что были перестроены.

  SELECT object_name(object_id) tablename,
         name indexname,
         nullif(name,name) statsname,
         STATS_DATE(object_id, index_id) lastupdated
    from sys.indexes
   where STATS_DATE(object_id, index_id) >= dateadd(hh,-1,getdate())
  -- and name like '_dta%'
   union all
  SELECT object_name(object_id) tablename,
         nullif(name,name) indexname,
         name statsname,
         STATS_DATE(object_id, stats_id) lastupdated
    from sys.stats
   where STATS_DATE(object_id, stats_id) >= dateadd(hh,-1,getdate())
  -- and name like '_dta%'
order by lastupdated desc

Фильтрует список только по тем индексам, которые были ОБНОВЛЕНЫ за последний час. Однако автоматическая статистика обычно включена по умолчанию, а также периодически перестраивает статистику, поэтому вам не захочется отбрасывать все показанные индексы. Раскомментирование and name like '_dta%' будет началом, если вы не переименуете их - в этом случае вы наверняка сможете вспомнить, как вы их назвали?

1 голос
/ 31 октября 2012

Я часто использую псевдодинамический SQL для генерации необходимых мне операторов SQL.при этом удаляются все индексы, начинающиеся с префикса _dta.

SELECT
'drop index' + OBJECT_NAME (object_id) + '. [' + name + ']' FROM
sys.indexes гдеимя типа '_dta%'

вставьте результаты этого в новое окно, а затем я бы дважды проверил каждый индекс вручную, прежде чем отбрасывать.

аналогично, вы можете сделать то же самоедля удаления статистики

SELECT
'drop index' + OBJECT_NAME (object_id) + '. [' + name + ']' FROM
sys.stats, где имя напоминает '_dta%'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...