Réindexation des bases d’une instance SQL Server Express
Je pensais aujourd’hui former mon stagiaire à SQL Server et, à ma grande surprise, nous avons en fait travaillé sur la version Express du moteur de bases de données relationnelle. Et donc, pas de SSIS, pas de plan de maintenance et pas d’agent SQL Server pour planifier les jobs. Pour la réindexation des tables, nous avons dû passer par des commandes systèmes et la commande sqlcmd.exe qui est fournie en installant SSMS sur le serveur.
Le script Transact-SQL reindexation.sql
Le script présenté ci-dessous charge le nom des tables et des schémas associés dans un curseur, à partir duquel, après reconstitution de la commande SQL, nous exécutons la commande de réindexation des tables DBCC DBREINDEX.
DECLARE cursorDb CURSOR FOR SELECT t.name nom_table,s.name nom_schema FROM sys.tables AS t INNER JOIN sys.schemas AS s ON t.schema_id=s.schema_id; DECLARE @table VARCHAR(1024); DECLARE @schema VARCHAR(1024); DECLARE @sql VARCHAR(1024); OPEN cursorDb; FETCH NEXT FROM cursorDb INTO @table, @schema; WHILE @@FETCH_STATUS = 0 BEGIN SET @sql='DBCC DBREINDEX (''['+@schema+'].['+ @table + ']'') WITH NO_INFOMSGS'; -- PRINT @sql; EXECUTE (@sql); FETCH NEXT FROM cursorDb INTO @table,@schema; END; CLOSE cursorDb; DEALLOCATE cursorDb; GO
Le fichier batch Windows reindexation.cmd
Le batch Windows récupère la liste des bases de données installées au niveau de la boucle for, puis exécute le script défini ci-dessus nommé d:\reindexation.sql dans le code.
@echo off SET PATH=%PATH%;"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn" for /f "tokens=*" %%d in ('sqlcmd -E -Q "SELECT name FROM sys.databases;" -h -1 -W ^|find /V "("') do ( sqlcmd -E -S PORTABLE -d %%d -i d:\reindexation.sql ) exit