begin process at 2008 05 10 02:02:14
1 169 039 membres
39 nouveaux aujourd'hui
13 953 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on ose pas poser une question, ça c'est une erreur !

SQL SERVER - PROCÉDURE STOCKÉE PERMETTANT DE RECONSTRUIRE TOUS LES INDEXES DE TOUTES LES BASES DU SERVEUR


Information sur la source

Catégorie :Divers Classé sous : indexes, dbcc, rebuild, index Niveau : Expert Date de création : 31/01/2006 Date de mise à jour : 15/02/2008 22:36:01 Vu : 4 606

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note


Description

Dans le même esprit que la source précédente :
- http://www.sqlfr.com/code.aspx?ID=29623

Voila une seconde qui permet de reconstruire intégralement les indexes de toutes les bases utilisatrices du server SQL.

Source

  • ------------------------------------------------------------------------------------------------------
  • CREATE PROCEDURE dbo.SP_System_RebuildAllIndexes
  • /*
  • Permet de reconstruire les Indexes
  • de toutes les bases du serveur SQL Server
  • */
  • AS
  • DECLARE @name sysname
  • DECLARE @nameTable sysname
  • DECLARE @LaRequette varchar(8000)
  • DECLARE @DateJour varchar(20)
  • SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_')
  • PRINT '---------------------------------------------------------------------'
  • PRINT ' DATE DE LA MISE A JOUR DES STATISTIQUES LANCEE : '+ @DateJour
  • PRINT '---------------------------------------------------------------------'
  • DECLARE TESTCURSEUR CURSOR
  • FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases
  • WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs')
  • OPEN TESTCURSEUR
  • FETCH NEXT FROM TESTCURSEUR
  • INTO @name
  • WHILE @@FETCH_STATUS = 0
  • BEGIN
  • PRINT ''
  • PRINT '---------------------------------------------------------------------'
  • PRINT ' RECONSTRUCTION DES INDEXES DE LA BASE : '+ @name
  • PRINT '---------------------------------------------------------------------'
  • SET @LaRequette = 'SELECT ''[''+ U.name +''].[''+ O.name +'']'' AS name
  • FROM ['+ @name +'].dbo.sysobjects O INNER JOIN ['+ @name +'].dbo.sysusers U
  • ON O.uid = U.uid WHERE O.xtype= ''U'' OR O.xtype= ''V''
  • AND O.name NOT IN (''syssegments'', ''sysconstraints'')
  • AND NOT(O.name LIKE ''%#%'') ;'
  • PRINT 'Changement de base : '+ @LaRequette
  • PRINT '---------------------------------------------------------------------'
  • EXEC('DECLARE TESTCURSEURTABLE CURSOR FOR '+ @LaRequette)
  • OPEN TESTCURSEURTABLE
  • FETCH NEXT FROM TESTCURSEURTABLE
  • INTO @nameTable
  • WHILE @@FETCH_STATUS = 0
  • BEGIN
  • SET @LaRequette = 'DBCC DBREINDEX (''['+ @name +'].'+ @nameTable +''', '''', 100)'
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • PRINT '---------------------------------------------------------------------'
  • FETCH NEXT FROM TESTCURSEURTABLE
  • INTO @nameTable
  • END
  • CLOSE TESTCURSEURTABLE
  • DEALLOCATE TESTCURSEURTABLE
  • FETCH NEXT FROM TESTCURSEUR
  • INTO @name
  • END
  • PRINT '---------------------------------------------------------------------'
  • PRINT ' FIN DE LA RECONSTRUCTION'
  • PRINT '---------------------------------------------------------------------'
  • CLOSE TESTCURSEUR
  • DEALLOCATE TESTCURSEUR
  • GO
  • ------------------------------------------------------------------------------------------------------
  • -- Elle est utilisable avec la commande suivante :
  • exec dbo.SP_System_RebuildAllIndexes
------------------------------------------------------------------------------------------------------ 
CREATE PROCEDURE dbo.SP_System_RebuildAllIndexes 
/* 
    Permet de reconstruire les Indexes 
     de toutes les bases du serveur SQL Server 
*/ 
  
AS 

DECLARE @name sysname
DECLARE @nameTable sysname
DECLARE @LaRequette varchar(8000) 
DECLARE @DateJour varchar(20) 
  
SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_') 
PRINT '---------------------------------------------------------------------' 
PRINT ' DATE DE LA MISE A JOUR DES STATISTIQUES LANCEE : '+ @DateJour 
PRINT '---------------------------------------------------------------------' 
  
DECLARE TESTCURSEUR CURSOR 
   FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases 
       WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs') 
  
OPEN TESTCURSEUR 
FETCH NEXT FROM TESTCURSEUR 
INTO @name 
  
WHILE @@FETCH_STATUS = 0 
  
BEGIN 
	PRINT ''
	PRINT '---------------------------------------------------------------------' 
	PRINT ' RECONSTRUCTION DES INDEXES DE LA BASE : '+ @name 
	PRINT '---------------------------------------------------------------------' 

	SET @LaRequette = 'SELECT ''[''+ U.name +''].[''+ O.name +'']'' AS name 
			FROM ['+ @name +'].dbo.sysobjects O INNER JOIN ['+ @name +'].dbo.sysusers U
			ON O.uid = U.uid WHERE O.xtype= ''U'' OR O.xtype= ''V''
			AND O.name NOT IN (''syssegments'', ''sysconstraints'')
			AND NOT(O.name LIKE ''%#%'') ;'

	PRINT 'Changement de base : '+ @LaRequette 
	PRINT '---------------------------------------------------------------------' 

	EXEC('DECLARE TESTCURSEURTABLE CURSOR FOR '+ @LaRequette)
	OPEN TESTCURSEURTABLE 
	FETCH NEXT FROM TESTCURSEURTABLE 
	INTO @nameTable 
  
	WHILE @@FETCH_STATUS = 0 
	BEGIN
		SET @LaRequette = 'DBCC DBREINDEX (''['+ @name +'].'+ @nameTable +''', '''', 100)' 
		PRINT 'Requette : '+ @LaRequette 
		EXECUTE (@LaRequette) 
		PRINT '---------------------------------------------------------------------' 
		FETCH NEXT FROM TESTCURSEURTABLE 
		INTO @nameTable 
	END	

	CLOSE TESTCURSEURTABLE 
	DEALLOCATE TESTCURSEURTABLE 

	FETCH NEXT FROM TESTCURSEUR 
	INTO @name   
END 
 
PRINT '---------------------------------------------------------------------' 
PRINT '  FIN DE LA RECONSTRUCTION'
PRINT '---------------------------------------------------------------------' 

CLOSE TESTCURSEUR 
DEALLOCATE TESTCURSEUR 
GO 

------------------------------------------------------------------------------------------------------ 
  
-- Elle est utilisable avec la commande suivante : 
exec dbo.SP_System_RebuildAllIndexes

Conclusion

En espérant que cette SP vous rende service.

Bon coding

Romelard Fabrice (Alias F___)
20 mars 2006 10:52:26 :
Modification de la requête de sélection des tables. Ajout des Vues pour les indexes.
17 janvier 2007 18:17:41 :
Modification de la requête
17 janvier 2007 18:39:26 :
modification
17 janvier 2007 18:52:02 :
modification
15 février 2008 22:24:03 :
Ajout des exceptions pour les tables système
15 février 2008 22:36:01 :
Gestion des tables temporaires
  • signaler à un administrateur
    Commentaire de dominique.stock le 08/06/2007 16:34:19

    Bonjour,
    J'utilise cette fonction sur 6.5 pour certains index, faites quand même attention au fillfactor !! qui est ici paramétré à 100 par défaut.

  • signaler à un administrateur
    Commentaire de Arthenius le 21/02/2008 11:18:16 9/10

    j'utilise moi aussi ce bout de code pour reindexer mes tables, par contre j'ai passer le fillfactor a 80 et modifier la requete :
    #  SET @LaRequette = 'SELECT ''[''+ U.name +''].[''+ O.name +'']'' AS name
    # FROM ['+ @name +'].dbo.sysobjects O INNER JOIN ['+ @name +'].dbo.sysusers U
    # ON O.uid = U.uid WHERE O.xtype= ''U'' OR O.xtype= ''V''
    # AND O.name NOT IN (''syssegments'', ''sysconstraints'')
    # AND NOT(O.name LIKE ''%#%'') ;'

    en

    #  SET @LaRequette = 'SELECT ''[''+ U.name +''].[''+ O.name +'']'' AS name
    # FROM ['+ @name +'].dbo.sysobjects O INNER JOIN ['+ @name +'].dbo.sysusers U
    # ON O.uid = U.uid WHERE O.xtype= ''U''
    # AND O.name NOT IN (''syssegments'', ''sysconstraints'')
    # AND NOT(O.name LIKE ''%#%'') ;'

    Pour ne pas prendre en compte les View de ma BDD
    sinon chouette boulot
    merci :)

Ajouter un commentaire

Discussions en rapport avec ce code source

Appels d'offres

Pub



Snippets en rapport

CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :