begin process at 2010 09 03 17:24:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :10 502

Auteur : fabrice69

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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

 Sources du même auteur

SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE
SQL SERVER 2000 - VIDER ET COMPACTER TOUTES LES BASES DE DON...
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN...
SQL SERVER - OBTENIR LA POSITION DU PREMIER CHIFFRE D'UNE CH...
SQL SERVER - UPDATE D'UNE TABLE EN BOUCLE PAR LOT

 Sources de la même categorie

CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE... par wissemhabboub
INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
MYSQL : CRÉATION D'UN GUID par maitredede
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN... par fabrice69

 Sources en rapport avec celle ci

SQL SERVER 2000 - CREER DES INDEXES SUR UN CHAMP EXISTANT DA... par fabrice69
SQL SERVER 2005 - LISTER LES INDEXES AVEC LE NOMBRE DE LIGNE... par fabrice69
SQL SERVER 2005 - DETRUIRE TOUS LES INDEXES APPLIQUES SUR UN... par fabrice69
SQL SERVER 2005 - RECUPERER LA LISTE DES INDEXES EXISTANT SU... par fabrice69
SQL SERVER - PROCÉDURE STOCKÉE PERMETTANT DE DEFRAGMENTER TO... par fabrice69

Commentaires et avis

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.

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

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...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales