Quando um banco de dados MSSQL passa por muito tempo sem manutenção, o desempenho do mesmo fica comprometido, além do mesmo começar a ocupar muito espaço no disco.
Com este script checamos os status de todas as tabelas, reindexamos os índices, e atualizamos o espaço ocupado pelos mesmos.
É muito importante que o banco esteja em modo SINGLE_USER, para evitar que outra conexão esteja utilizando o banco enquanto a manutenção é feita.
Aqui segue o código do script:
DECLARE @DsDatabase SYSNAME SELECT @DsDatabase = D.Name FROM Master..SysProcesses P, Master..SysDatabases D WHERE P.Dbid = D.Dbid AND P.Spid = @@Spid DECLARE @NomeTabela VARCHAR(80) DECLARE CursorTabelas CURSOR FAST_FORWARD FOR SELECT DISTINCT CONVERT(VARCHAR(80), T.Name) AS Objeto FROM SysObjects T, SysIndexes I WHERE T.Type = 'U' AND I.Id = T.Id ORDER BY Objeto OPEN CursorTabelas FETCH NEXT FROM CursorTabelas INTO @NomeTabela WHILE @@fetch_status = 0 BEGIN PRINT 'Reindexando tabela ' + @NomeTabela + '...' IF (SELECT DATABASEPROPERTYEX (@DsDatabase, 'UserAccess')) = 'SINGLE_USER' DBCC CHECKTABLE (@NomeTabela, REPAIR_ALLOW_DATA_LOSS) DBCC DBREINDEX (@NomeTabela) DBCC UPDATEUSAGE (@DsDatabase, @NomeTabela) FETCH NEXT FROM CursorTabelas INTO @NomeTabela END CLOSE CursorTabelas DEALLOCATE CursorTabelas -- Fim