среда, 6 февраля 2013 г.

Скрипт обновления статистики в базе данных с условием

В отличие от стандартного блока Maintance Plan-а, где статистика обновляется не смотря на дату последнего обновления, ниже приводится скрипт обновления статистики в базе данных с условием последней даты обновления статистики.

Сам скрипт:
 
-- запрос обновления статистики таблицы по дате последнего обновления
---1 получаем список имен статистики для обновления и записываем во временную таблицу

declare @dt as datetime
set @dt= getdate()-01 -- дата, меньше которой будем обновлять


begin try

      select o.name as [objname],s.name as [shname],o.object_id,st.name as     [stname]

      into #t_stat

    from sys.stats st

        inner join  sys.objects o  on st.object_id=o.object_id

        inner join   sys.schemas  s on o.schema_id=s.schema_id

      where o.type='U'

      --and STATS_DATE(st.object_id, st.stats_id)  <@dt    --фильтр по дате

      --and o.name='dbservers'                             --фильтра по обеъкту

end try

begin catch
      print (cast(error_number() as nchar(5))+'_'+ ERROR_MESSAGE())
      drop table #t_stat
end catch

--2 открываем курсом и обновляем статистику
declare cur1 cursor
             for select objname,shname,stname from #t_stat

open cur1
declare @stname sysname
declare @obj sysname
declare @sh sysname

fetch next from cur1 into @obj,@sh,@stname

WHILE (@@FETCH_STATUS <> -1)
BEGIN

      execute ('update statistics ['+@sh+'].['+@obj+'] '+@stname +' WITH SAMPLE 80 PERCENT ')
      print ('update statistics ['+@sh+'].['+@obj+'] ['+@stname +'] WITH SAMPLE 80 PERCENT ')

      fetch next from cur1 into @obj,@sh,@stname

end

close cur1
DEALLOCATE cur1
--select * from #t_stat

drop table #t_stat
GO


в скрипте есть возможность поставить условие обновлять по дате и условие по таблицам.

Комментариев нет :

Отправить комментарий