Desfragmentando os índices de todas as tabelas de determinado database no MSSQL

Abaixo descrevo a rotina que utilizo para desfragmentar os índices das tabelas de determinada base.
Normalmente crio uma procedure com o código abaixo, ou coloco o script diretamente nos blocos de código do agendador do SQLServer Agent no MSSQL 2000 ou MSDE. Se for no SQLExpress 2005, que não possue o Agent, crio um arquivo com extensão .sql e outro arquivo .cmd contendo a chamada para o arquivo .sql e crio uma agendamento no Agendador de tarefas do Windows rodando este arquivo .cmd.

-- TROCAR NOME DA BASE NA LINHA ABAIXO EM [database_name]
-- E NA LINHA DO COMANDO DBCC INDEXDEFRAG
-- EX1.: De
USE [database_name] por USE CIGAM .
-- EX2.: De
DBCC INDEXDEFRAG ([database_name], @TableName, @IndexName)
-- por
DBCC INDEXDEFRAG ('CIGAM', @TableName, @IndexName)

USE
[database_name]

DECLARE @TableName sysname
DECLARE @IndexName varchar(20)

DECLARE cur_fetch
CURSOR FOR
SELECT t.name TableName,
i.name IndexName
FROM sys.sysindexes i,
sys.tables t
WHERE i.id = t.object_id
and i.keycnt > 0
and t.type ='U'
and i.rows > 0
ORDER BY 1,2

OPEN cur_fetch

FETCH NEXT FROM cur_fetch INTO @TableName,@IndexName

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT 'Defragmenting index = '
+ rtrim(@IndexName)
+ ' of the '
+ rtrim(@TableName) + ' table'

--Trocar o [database_name] pelo nome da base, entre apóstrofes. Ex.: 'CIGAM'.
DBCC INDEXDEFRAG (
[database_name], @TableName, @IndexName)

FETCH NEXT FROM cur_fetch INTO @TableName, @IndexName

END

CLOSE cur_fetch
DEALLOCATE cur_fetch

Comentários

Postagens mais visitadas deste blog

[Openfire] - Ajuste de horário no cliente Spark

Verificar uso de disco em partição ASM do Oracle 11g no Linux

[Kettle] - Ajuste de Memória de Utilização