Accueil > > > [SQL SERVEUR] VÉRIFIER L'ESPACE OCCUPÉ DANS UNE BASE DE DONNÉES
[SQL SERVEUR] VÉRIFIER L'ESPACE OCCUPÉ DANS UNE BASE DE DONNÉES
Information sur la source
Description
Bonjour, Dans le cadre de mon travail, je dois régulièrement suivre l'occupation des données dans une base SQL Serveur. Dans Entreprise Manager d'SQL 2000, on peut facilement visualiser l'occupation des données. Sous SQL 2005, on peut aussi, mais seulement en changeant le mode de compatibilité, ce que je ne souhaite pas faire. Donc, j'ai créé un script qui me permet de récupérer les informations minimales et nécessaire et les affiche. Ca fait des années que je profite de toutes les informations du réseau code-sources, à moi de donner maintenant. Les points que je trouve intéressant dans mon script, en dehors de sa finalité, c'est : - Gestion des tables temporaires avec tests de leurs présences. - Exécution de procédures systèmes et affectation du résultat dans des tables. - Lectures des emplacements physiques des données. - Lecture des noms logiques, car certains traitements veulent ces caractéristiques. - Conversion des valeurs des tables en Mégaoctets. J'ai choisi de faire un script qui s'exécute indifféremment sous SQL 2000 ou 2005 pour avoir plus de libertés.
Source
- -- Test et suppression des tables temporaires si elles existent.
- -- Cela permet d'executer ce script plusieurs fois sana avoir besoin de faire de changements
- IF EXISTS (SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID(N'TEMPDB..#TableTempInfosData'))
- DROP TABLE [#TableTempInfosData]
-
- IF EXISTS (SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID(N'TEMPDB..#TableTempInfosLog'))
- DROP TABLE [#TableTempInfosLog]
-
- ------------------------------------------------------------------------------------------------------
- -- Création des tables temporaires
- -- Cette table réceptionne les informations concernant le fichier de données
- CREATE TABLE #TableTempInfosData (
- Identifiant INT,
- IndexGroupeFichier INT,
- EspaceTotal INT,
- EspaceUtiliser INT,
- NOM VARCHAR(1024),
- NomFichier VARCHAR(1024)
- )
-
- -- Cette table réceptionne les informations concernant le fichier de logs
- CREATE TABLE #TableTempInfosLog
- (
- NomBase VARCHAR(32),
- TailleLog REAL,
- EspaceUtilise REAL,
- Statut INT
- )
-
- ------------------------------------------------------------------------------------------------------
- DECLARE @NomDatabase VARCHAR(255)
-
- -- Récupération du nom de la base de données en cours
- SELECT @NomDatabase = DB_NAME(dbid) FROM MASTER..SYSPROCESSES WHERE SPID = @@SPID
-
- -- Récupération d'informations générales sur la base en cours
- DECLARE @NomLogiqueFichierDonnees AS VARCHAR(255)
- DECLARE @NomPhysiqueFichierDonnees AS VARCHAR(255)
- DECLARE @TailleFichierDonnees AS INT
-
- DECLARE @NomLogiqueFichierLog AS VARCHAR(255)
- DECLARE @NomPhysiqueFichierLog AS VARCHAR(255)
- DECLARE @TailleFichierLog AS INT
-
- -- Récupération des noms logiques des fichiers de la base en cours
- SET @NomLogiqueFichierDonnees = FILE_NAME ( 1 )
- SET @NomLogiqueFichierLog = FILE_NAME ( 2 )
-
- -- Récupération des noms physiques des fichiers de la base en cours
- SELECT @NomPhysiqueFichierDonnees = FILENAME FROM MASTER..SYSALTFILES WHERE NAME = @NomLogiqueFichierDonnees
- SELECT @NomPhysiqueFichierLog = FILENAME FROM MASTER..SYSALTFILES WHERE NAME = @NomLogiqueFichierLog
-
- ------------------------------------------------------------------------------------------------------
- -- Remplissage des tables temporaires avec les procédures systèmes
- -- Avec suppression des messages d'informations sans intérêts
-
- -- Cette procédure système n'est pas documentée, mais elle est bien utile.
- -- Elle donne l'occupation des données dans la base active
- INSERT INTO #TableTempInfosData
- EXECUTE ('DBCC SHOWFILESTATS WITH NO_INFOMSGS')
-
- -- Cette procédure donne l'occupation des données dans le fichier de log
- INSERT INTO #TableTempInfosLog
- EXECUTE ('DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS')
-
- ------------------------------------------------------------------------------------------------------
- -- Traitement des données
- DECLARE @TailleData FLOAT
- DECLARE @DataUtilise FLOAT
- DECLARE @DataVide FLOAT
- DECLARE @PourcentDataPleine FLOAT
- DECLARE @PourcentDataVide FLOAT
-
- DECLARE @TailleLog FLOAT
- DECLARE @EspaceLogUtilise FLOAT
- DECLARE @EspaceLogVide FLOAT
- DECLARE @PourcentLogPlein FLOAT
- DECLARE @PourcentLogVide FLOAT
-
- -- Lecture des valeurs du fichier de données
- SELECT @TailleData = (SUM(EspaceTotal) * 64 * 100) / 1024,
- @DataUtilise = (SUM(EspaceUtiliser) * 64 * 100) /1024
- FROM #TableTempInfosData
-
- -- Calcul pour avoir la taille en Mega à deux décimales
- SET @TailleData = @TailleData / 100
- SET @DataUtilise = @DataUtilise / 100
- SET @DataVide = @TailleData - @DataUtilise
-
- -- Calcul des poucentages d'occupations
- SET @PourcentDataVide = (1 - @DataUtilise / @TailleData ) * 100
- SET @PourcentDataPleine = 100 - @PourcentDataVide
-
- -- Lecture des valeurs du fichier de log
- SELECT @TailleLog = TailleLog,
- @EspaceLogUtilise = (TailleLog * EspaceUtilise) / 100
- FROM #TableTempInfosLog
- WHERE NomBase = @NomDatabase
-
- -- Calcul l'espace libre dans le fichier de log
- SET @EspaceLogVide = @TailleLog - @EspaceLogUtilise
-
- -- Calcul des poucentages d'occupations
- SET @PourcentLogVide = (1 - @EspaceLogUtilise / @TailleLog ) * 100
- SET @PourcentLogPlein = 100 - @PourcentLogVide
-
- ------------------------------------------------------------------------------------------------------
- -- Affichage des différents résultats
- PRINT '--------------------------------------------------------------------------------------------------------- '
- PRINT 'BASE : ' + @NomDatabase + ' | Nom Logique Données : ' + @NomLogiqueFichierDonnees+ ' | Nom Logique Logs : ' + @NomLogiqueFichierLog
- PRINT '--------------------------------------------------------------------------------------------------------- '
- PRINT 'NOM PHYSIQUE DONNEES | ' + @NomPhysiqueFichierDonnees
- PRINT 'NOM PHYSIQUE LOGS | ' + @NomPhysiqueFichierLog
- PRINT '--------------------------------------------------------------------------------------------------------- '
- PRINT 'FICH DATA TAILLE | ' + CAST(ROUND(@TailleData, 2) AS VARCHAR) + ' Mo'
- PRINT 'FICH DATA PLEIN | ' + CAST(ROUND(@DataUtilise, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentDataPleine, 2) AS VARCHAR) + ' %'
- PRINT 'FICH DATA VIDE | ' + CAST(ROUND(@DataVide, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentDataVide, 2) AS VARCHAR) + ' %'
- PRINT '--------------------------------------------------------------------------------------------------------- '
- PRINT 'FICH LOG TAILLE | ' + CAST(ROUND(@TailleLog, 2) AS VARCHAR) + ' Mo'
- PRINT 'FICH LOG PLEIN | ' + CAST(ROUND(@EspaceLogUtilise, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentLogPlein, 2) AS VARCHAR) + ' %'
- PRINT 'FICH LOG VIDE | ' + CAST(ROUND(@EspaceLogVide, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentLogVide, 2) AS VARCHAR) + ' %'
- PRINT '--------------------------------------------------------------------------------------------------------- '
-- Test et suppression des tables temporaires si elles existent.
-- Cela permet d'executer ce script plusieurs fois sana avoir besoin de faire de changements
IF EXISTS (SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID(N'TEMPDB..#TableTempInfosData'))
DROP TABLE [#TableTempInfosData]
IF EXISTS (SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID(N'TEMPDB..#TableTempInfosLog'))
DROP TABLE [#TableTempInfosLog]
------------------------------------------------------------------------------------------------------
-- Création des tables temporaires
-- Cette table réceptionne les informations concernant le fichier de données
CREATE TABLE #TableTempInfosData (
Identifiant INT,
IndexGroupeFichier INT,
EspaceTotal INT,
EspaceUtiliser INT,
NOM VARCHAR(1024),
NomFichier VARCHAR(1024)
)
-- Cette table réceptionne les informations concernant le fichier de logs
CREATE TABLE #TableTempInfosLog
(
NomBase VARCHAR(32),
TailleLog REAL,
EspaceUtilise REAL,
Statut INT
)
------------------------------------------------------------------------------------------------------
DECLARE @NomDatabase VARCHAR(255)
-- Récupération du nom de la base de données en cours
SELECT @NomDatabase = DB_NAME(dbid) FROM MASTER..SYSPROCESSES WHERE SPID = @@SPID
-- Récupération d'informations générales sur la base en cours
DECLARE @NomLogiqueFichierDonnees AS VARCHAR(255)
DECLARE @NomPhysiqueFichierDonnees AS VARCHAR(255)
DECLARE @TailleFichierDonnees AS INT
DECLARE @NomLogiqueFichierLog AS VARCHAR(255)
DECLARE @NomPhysiqueFichierLog AS VARCHAR(255)
DECLARE @TailleFichierLog AS INT
-- Récupération des noms logiques des fichiers de la base en cours
SET @NomLogiqueFichierDonnees = FILE_NAME ( 1 )
SET @NomLogiqueFichierLog = FILE_NAME ( 2 )
-- Récupération des noms physiques des fichiers de la base en cours
SELECT @NomPhysiqueFichierDonnees = FILENAME FROM MASTER..SYSALTFILES WHERE NAME = @NomLogiqueFichierDonnees
SELECT @NomPhysiqueFichierLog = FILENAME FROM MASTER..SYSALTFILES WHERE NAME = @NomLogiqueFichierLog
------------------------------------------------------------------------------------------------------
-- Remplissage des tables temporaires avec les procédures systèmes
-- Avec suppression des messages d'informations sans intérêts
-- Cette procédure système n'est pas documentée, mais elle est bien utile.
-- Elle donne l'occupation des données dans la base active
INSERT INTO #TableTempInfosData
EXECUTE ('DBCC SHOWFILESTATS WITH NO_INFOMSGS')
-- Cette procédure donne l'occupation des données dans le fichier de log
INSERT INTO #TableTempInfosLog
EXECUTE ('DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS')
------------------------------------------------------------------------------------------------------
-- Traitement des données
DECLARE @TailleData FLOAT
DECLARE @DataUtilise FLOAT
DECLARE @DataVide FLOAT
DECLARE @PourcentDataPleine FLOAT
DECLARE @PourcentDataVide FLOAT
DECLARE @TailleLog FLOAT
DECLARE @EspaceLogUtilise FLOAT
DECLARE @EspaceLogVide FLOAT
DECLARE @PourcentLogPlein FLOAT
DECLARE @PourcentLogVide FLOAT
-- Lecture des valeurs du fichier de données
SELECT @TailleData = (SUM(EspaceTotal) * 64 * 100) / 1024,
@DataUtilise = (SUM(EspaceUtiliser) * 64 * 100) /1024
FROM #TableTempInfosData
-- Calcul pour avoir la taille en Mega à deux décimales
SET @TailleData = @TailleData / 100
SET @DataUtilise = @DataUtilise / 100
SET @DataVide = @TailleData - @DataUtilise
-- Calcul des poucentages d'occupations
SET @PourcentDataVide = (1 - @DataUtilise / @TailleData ) * 100
SET @PourcentDataPleine = 100 - @PourcentDataVide
-- Lecture des valeurs du fichier de log
SELECT @TailleLog = TailleLog,
@EspaceLogUtilise = (TailleLog * EspaceUtilise) / 100
FROM #TableTempInfosLog
WHERE NomBase = @NomDatabase
-- Calcul l'espace libre dans le fichier de log
SET @EspaceLogVide = @TailleLog - @EspaceLogUtilise
-- Calcul des poucentages d'occupations
SET @PourcentLogVide = (1 - @EspaceLogUtilise / @TailleLog ) * 100
SET @PourcentLogPlein = 100 - @PourcentLogVide
------------------------------------------------------------------------------------------------------
-- Affichage des différents résultats
PRINT '--------------------------------------------------------------------------------------------------------- '
PRINT 'BASE : ' + @NomDatabase + ' | Nom Logique Données : ' + @NomLogiqueFichierDonnees+ ' | Nom Logique Logs : ' + @NomLogiqueFichierLog
PRINT '--------------------------------------------------------------------------------------------------------- '
PRINT 'NOM PHYSIQUE DONNEES | ' + @NomPhysiqueFichierDonnees
PRINT 'NOM PHYSIQUE LOGS | ' + @NomPhysiqueFichierLog
PRINT '--------------------------------------------------------------------------------------------------------- '
PRINT 'FICH DATA TAILLE | ' + CAST(ROUND(@TailleData, 2) AS VARCHAR) + ' Mo'
PRINT 'FICH DATA PLEIN | ' + CAST(ROUND(@DataUtilise, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentDataPleine, 2) AS VARCHAR) + ' %'
PRINT 'FICH DATA VIDE | ' + CAST(ROUND(@DataVide, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentDataVide, 2) AS VARCHAR) + ' %'
PRINT '--------------------------------------------------------------------------------------------------------- '
PRINT 'FICH LOG TAILLE | ' + CAST(ROUND(@TailleLog, 2) AS VARCHAR) + ' Mo'
PRINT 'FICH LOG PLEIN | ' + CAST(ROUND(@EspaceLogUtilise, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentLogPlein, 2) AS VARCHAR) + ' %'
PRINT 'FICH LOG VIDE | ' + CAST(ROUND(@EspaceLogVide, 2) AS VARCHAR) + ' Mo - ' + CAST(ROUND(@PourcentLogVide, 2) AS VARCHAR) + ' %'
PRINT '--------------------------------------------------------------------------------------------------------- '
Conclusion
J'espère que vous trouverez un intérêt à cette source. Les seules sources s'en approchant ici, parle de la place sur disque dur, mais rien sur l'occupation dans l'enveloppe de la base.
Historique
- 23 janvier 2009 11:13:21 :
- Mise en page. :)
- 23 janvier 2009 11:16:01 :
- -
Commentaires et avis
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|