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

Link original

Posts Similares