MS SQL - Taches de maintenance

Verifier et rebuilder les cluster index



-- Insertion de données dans une table dans TempDB via boucle WHILE via T-SQL
-- Vérification et rebuild des cluster Index via T-SQL
--
--
-- Remplacer YourTableName par le nom de la table que vous souhaitez utiliser pour faire vos tests
-- Remplacer les noms de colonnes Date, Montant, Quantité par ceux que vous souhaitez utiliser pour vos tests
--
--
-- Utilisation la base de données tempdb :
USE tempdb;
GO
-- Création d'une table avec une clé primaire spécifiée.
--   Sachez que la déclaration d'une clé primaire crée un index 
--   cluster, sauf si vous spécifiez un index non-cluster.
CREATE TABLE dbo.YourTableName
( YourTableNameID int IDENTITY(1,1) PRIMARY KEY,
  Date datetime2 NOT NULL,
  Montant nvarchar(100) NOT NULL,
  Quantité int NOT NULL
);
GO
-- Insérez des données dans la table.
SET NOCOUNT ON;
DECLARE @Counter int = 0;
WHILE @Counter < 10000 BEGIN
  INSERT dbo.YourTableName (Date, Montant, Quantité)
    VALUES(SYSDATETIME(),'100',CAST(RAND() * 1000 AS int));
  SET @Counter += 1;
END;
GO
-- Vérifiez le niveau de fragmentation via sys.dm_db_index_physical_stats.
-- Observez avg_fragmentation_in_percent et avg_page_space_used_in_percent
SELECT * 
FROM sys.dm_db_index_physical_stats(DB_ID(),
                                    OBJECT_ID('dbo.YourTableName'),
                                    NULL,
                                    NULL,
                                    'DETAILED');
GO
-- Modifiez les données de la table. 
SET NOCOUNT ON;
DECLARE @Counter int = 0;
WHILE @Counter < 10000 BEGIN
  UPDATE dbo.YourTableName SET Montant = REPLICATE('100',CAST(RAND() * 100 AS int))
    WHERE YourTableNameID = @Counter % 10000;
  IF @Counter % 100 = 0 PRINT @Counter;
  SET @Counter += 1;
END;
GO
-- Vérifiez le niveau de fragmentation via sys.dm_db_index_physical_stats.
--         Notez à nouveau avg_fragmentation_in_percent et avg_page_space_used_in_percent
SELECT * 
FROM sys.dm_db_index_physical_stats(DB_ID(),
                                    OBJECT_ID('dbo.YourTableName'),
                                    NULL,
                                    NULL,
                                    'DETAILED');
GO
-- Reconstruisez la table et ses index.
ALTER INDEX ALL ON dbo.YourTableName REBUILD;
GO
-- Vérifiez le niveau de fragmentation via sys.dm_db_index_physical_stats.
--  Observez à nouveau avg_fragmentation_in_percent et avg_page_space_used_in_percent
SELECT * 
FROM sys.dm_db_index_physical_stats(DB_ID(),
                                    OBJECT_ID('dbo.YourTableName'),
                                    NULL,
                                    NULL,
                                    'DETAILED');
GO
-- Supprimez la table à la fin de vos test si nécessaire
DROP TABLE dbo.YourTableName;
GO




Retour...

Réparer une BDD corrompue avec DBCC



-- Réparer un BDD corrompue avec DBCC - Un exemple simple pour comprendre le principe
-- (ATTENTION : Valable pour BDD non répliquée uniquement !!)
-- Imaginons une BDD MyBDD qui est corrompue
--
-- Remplacer MyBdd par le nom de votre BDD corrompue
-- Remplacer Your-Table-To-Check par le nom de votre table corrompue. Replacer aussi les nom de colonnes utiliser comme exemple (Your-Cl-ID)
--

-- Lancer DBCC CHECKDB sur MyBDD.
-- Noter les erreurs qui sont indiquées
DBCC CHECKDB('MyBDD');
GO
-- Si des erreurs précisent qu'une ou plusieurs tables sont corrompues, essayer de consulter le contenu de ces tables : .
SELECT * FROM MyBDD.dbo.Your-Table-To-Check;
GO
-- Lorsque vous ne disposez pas d'une sauvegarde avant corruption, il
-- reste uniquement la possibilité d'effectuer une récupération de la base de données.
-- ATTENTION : à utiliser uniquement si aucune autre possibilité !!
-- En effet, après récupération, il n'existe aucune garantie sur la cohérence logique 
-- dans la base de données (comme les contraintes de clé étrangère).

-- Définir la base de données dans le mode SINGLE_USER et lancer la récupération :
ALTER DATABASE MyBDD SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB('MyBDD', REPAIR_ALLOW_DATA_LOSS);
GO
ALTER DATABASE MyBDD SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO
-- Controller s'il est désormais possible d'accéder à la ou les tables qui posaient problèmes :
SELECT * FROM MyBDD.dbo.Your-Table-To-Check;
GO
-- Relancer DBCC CHECKDB pour vérifier la cohérence de la structure de la base de données
DBCC CHECKDB('MyBDD') WITH NO_INFOMSGS;
GO





Retour...

Résumé

Contact :

Patrice Guilloux
Sociéte : AR Systèmes 
FRANCE

pguilloux@outlook.com
Certifié Microsoft :



Certifié HP (APC, AIS, ASE, Master ASE) :
 
   
© Copyright SiteName. Tous droits réservés.