SQL Server : nécessité de réduire après réindexation
Lors de la reconstruction des index, la taille de vos fichiers de données (.MDF) et des journaux de transactions (.LDF) peut connaître un accroissement spectaculaire. Il convient donc d’en réduire la taille après que la réindexation est terminée.
La séquence à appliquer en la matière est de :
- désactiver le mode de récupération complet sur la base de données en passant en mode simple,
- reconstruire les index,
- réduire les fichiers de la bases de données (data et journaux de transactions),
- réactiver le mode de récupération complet,
- faire une sauvegarde complète.
Le script de maintenance d’une base de données SQL Server
BEGIN USE master; --Mode simple ALTER DATABASE ma_database SET RECOVERY SIMPLE WITH NO_WAIT; USE ma_database; --Réindexation : on suppose que les tables sont dans le schém dbo et que les tables n'ont pas d'espace ou de caractères spéciaux dans leur nom. DECLARE curs_it CURSOR FOR SELECT i.name i_name, t.name t_name FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id=t.object_id; OPEN curs_it; DECLARE @indexname sysname; DECLARE @tablename sysname; FETCH NEXT FROM curs_it INTO @indexname, @tablename; WHILE (@@FETCH_STATUS <> -1) BEGIN; EXECUTE ('ALTER INDEX ' + @indexname + ' ON dbo.' + @tablename + ' REBUILD;'); FETCH NEXT FROM curs_it INTO @indexname, @tablename; END; CLOSE curs_it ; DEALLOCATE curs_it; --Réduction DBCC SHRINKDATABASE('ma_database', 5 ); --Mode complet ALTER DATABASE ma_database SET RECOVERY FULL WITH NO_WAIT; BACKUP DATABASE ma_database TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\ma_database.bak' WITH RETAINDAYS = 7, NOFORMAT, NOINIT, NAME = 'ma_database', SKIP, NOREWIND, NOUNLOAD, STATS = 10 END GO