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 n'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 : 7 799

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
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___)

 

Historique

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

Commentaires et avis

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 :)

signaler à un administrateur
Commentaire de dymsbess le 15/06/2009 13:45:47

Pour éviter le curseur sur les bases de données, vous pouvez également utiliser la procédure stockées suivante : EXEC master.sys.sp_MSforeachdb 'USE[?]; SELECT * FROM sysobjects'  

http://www.xoowiki.com/Article/SQL-Server/multi-bases-de-donnees-33.aspx

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

comment faire une association CIM [ par raziel62 ] Salut,j'ai un probleme sur ma base de donnée qui gere des composants hardware, je n'arrive pas a relier deux tables (constructeur et type_composant).j creation d'index sous ms sql serveur ? [ par jimmy69 ] Bonjour a tous, Mes tables sont presque crees sous ms sql serveur 2000...J'avais lu un article sur l'utilite de la creation d' index ...sur les tables combien d'index faut il créer ? [ par vincentstryckmans ] Bonjour, Mon application enregsitre les description d'incident ferroviaire. Les causes r&#233;elles d'incident sont d&#233;crits en 6 mots. Les 4 pre Drop Table [ par SuperBouly ] Bonjour, Je désire supprimer une table sur une base Access distante.Je fais : MaRequete="DROP TABLE MaTable" , puis le programme est censé exécute Primary Key [ par Zylott ] Bonjour,dans une table composée de plusieurs champs , j'aimerai connaitre comment extraire le nom du champ qui est la primary key.j'utilise :exec dbo. Génération automatique d'index sur des tables liées [ par gregory_nallet ] Bonjour à tous, Mon problème actuel est le suivant:Nous avons récemment migré notre application Access vers SQL Server. Pour le moment, nous continu Base MySQL et Index [ par MadM@tt ] Bonjour à tous,J'ai quelques question concernant les Index dans une table SQL.Est-il utile de les mettre sur des champs enum (Par exemple sur un champ MS Sql Server et les index [ par sarahrami ] Bonjour,J'aimerai savoir si ce script :CREATE INDEX [IX_Etudiant] ON [eHnv].[dbo].[Etudiant]([<font color="#008000" size="2 [MSSQL]Un avertissement de taille dépassée pour un INDEX [ par randriano ] Bonjour,J'ai ce message à la création de ma base grâce à un long script. Voici le message de Warning:Warning! The maximum key length is 900 bytes. The Index Dans SQL [ par crn_c21 ] Bonjour,Dans une table SQL 2005, j'ai un champ IdRlt(clè primaire).Dans ce champ, j'ajoute et je supprime des lignes très régulièrement et je dois don


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.