用于识别整个服务器上每个数据库的所有碎片索引的脚本?

时间:2012-07-25 12:40:51

标签: sql-server-2008-r2

我是数据库的新手,正在寻找一种方法来查找服务器上的所有碎片索引,而不必单独浏览每个数据库。

1 个答案:

答案 0 :(得分:1)

一种方法是在循环中构建命令:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += '
UNION ALL 
SELECT db = ''' + name + ''', * 
FROM sys.dm_db_index_physical_stats(' + RTRIM(database_id)
  + ', NULL, NULL, NULL, ''SAMPLED'') -- WHERE ...'
FROM sys.databases WHERE database_id > 4;

SET @sql = STUFF(@sql,1,14,'');

EXEC sp_executesql @sql;

但是你对输出做了什么?有更好的解决方案可以为您自动化。例如,Ola Hallengren's free maintenance solutionMichelle Ufford (SQLFool)'s free defrag script和我们的新SQL Sentry Fragmentation Manager

免责声明:我为SQL Sentry工作。