IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Obtenir l'espace disponible des fichiers de données de toutes mes bds


Sujet :

Administration SQL Server

  1. #1
    Invité
    Invité(e)
    Par défaut Obtenir l'espace disponible des fichiers de données de toutes mes bds
    Hello.
    J'ai un gros job journalier qui va chercher diverses informations sur la plupart de mes serveurs pour en connaitre les évolutions.
    Pour faire bref, ça fonctionne à coup de linked Servers et d'openquery et les informations sont historisées dans diverses tables. Au final, je produis un courriel en html qui me fait gagner bien du temps.
    Cependant, je n'arrive pas à obtenir la taille « disponible » des fichiers de données.
    En essayant avec ceci, j'obtiens juste l'information sur la bd master

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from openquery ("machine56465"
    ,'Select DB_NAME() DBName, Name FileName, fileproperty(Name,''SpaceUsed'') SpaceUsed from master.sys.sysfiles' )
    Et bien sûr, le foreachdb ne fait pas bon ménage avec le openquery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM OPENQUERY( "test89987",'sp_msforeachdb ''select  quotename(?)''' )
     
    Msg 208, Level 16, State 1, Procedure sp_MSforeach_worker, Line 102
    Invalid object name '#qtemp'.
    Si vous avez des pistes, je suis preneur.
    Merci bien.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Le mieux serait de remonter cela avec coquillage puissant.

    En 2014 une vue permet d'avoir des infos détaillées des disques et des fichiers du système.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Je partirais sur un job SSIS pour faire de la collecte multi instances.
    David B.

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    ... ou en PowerShell également pour la collecte multi instances

    ++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    ... ou en PowerShell également pour la collecte multi instances
    C'est bien ce que je disais.... "Le mieux serait de remonter cela avec coquillage puissant.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    C'est bien ce que je disais.... "Le mieux serait de remonter cela avec coquillage puissant.
    Yep et pour ne pas te paraphraser voici un petit bout de code (à retravailler bien sûr ... j'avais le temps de m'amuser un peu. Le script se base sur un fichier texte avec une liste de serveur mais on peut tout à fait remplacer cette source par autre chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Param 
    (
        [ValidateScript({ Test-Path $_ })]
        [string] $path = $(throw "Server file path")
    )
     
     
    function GetDatabaseUsedSpaceByServer
    {
        Param (
            [string] $Server = $(throw "SQL Server Name")
        )
     
        try
        {
            $serverConn = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($server);
            $serverConn.Connect();
        }
        catch 
        {  
            Write-Host "The server $serverdoes not exist or is not reachable." -ForegroundColor Red;
            Exit;
        }
     
        $objServer = New-Object("Microsoft.SqlServer.Management.Smo.Server") $Server;
     
        $t = @();
     
        foreach ($database in $objServer.databases | Where-Object { $_.IsAccessible -eq $True })
        {
            foreach ($group in $database.Filegroups)
            {
     
                foreach ($file in $group.Files) 
                {
                    $properties = @{"Server Name"=$Server; 
                                    "Database Name"=$database.Name;
                                    "Physical Name"=$file.FileName
                                    "Space Used (KB)"=$file.UsedSpace
                                   };
     
                    $NewObject = New-Object PSObject -Property $Properties;
                    $t += $NewObject;
                }
            }
     
        }
     
        $t | ft -AutoSize;
    }
     
    # Clear host
    Clear-Host;
     
    # Load assemblies
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null;
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null;
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null;
     
    # Retrieve servers list into the text file
    $content = Get-Content $path;
     
    # Show used space information for each server and databases
    foreach ($row_content in $content)
    {
        $server_name = ($row_content.split(";"))[0];
        GetDatabaseUsedSpaceByServer -Server $server_name;
    }
    ++

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Oui, mais alors là ça va pas.... Tu pourrais forcer un peu le trait et nous faire une gentille fonction SQL CLR en mode UNSAFE pour récupérer directement ces informations en SQL !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Je laisse çà à Elsuket vu qu'il adore le sqlclr en mode unsafe .. voir le mode dangerous

    ++

  9. #9
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Le mode UNSAFE n'est pas nécessaire pour mesurer la taille des fichiers : le niveau EXTERNAL_ACCESS avec une signature ou un nommage fort sont des manières propres de faire. Par ailleurs je ne suis pas certain que l'on puisse auditer l'espace libre à l'intérieur du fichier.

    Le mode UNSAFE n'est à utiliser que pour exécuter du code managé. Donc, par exemple, exécuter du code C managé à partir de la CLR, c'est un peu plus que téméraire : c'est être délibérément effronté

    Pour ma part, je fais ça très simplement : je stocke ça dans une table, et je garde les données sur 30 jours roulants. Tous les jours, je viens chercher les données d'il y a 29 jours (juste au cas où le job planterait (on le sait pas une alerte SQL Agent)) avec OPENQUERY justement, et je mets ça dans une table sur une petite instance SQL Server dédiée à la DBA.
    Cela présente l'avantage, mais ce n'est que mon avis, d'avoir un peu d'historique sur le serveur (c'est bien quand on en gère un paquet) sans avoir à se connecter au serveur de DBA, qui sert plus à faire de la prospective.

    Le package SSIS est là aussi une bonne option. Le PowerShell est pas mal, mais malheureusement un peu lent. En revanche, cela permet, quand on est consultant comme vous, de n'avoir presque pas à toucher aux bases de données du client.

    @++

  10. #10
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Comme on en a discuté dans ce cas précis je pense que PowerShell sera beaucoup plus rapide que les autres méthodes ... ca serait intéressant de tester :-)

    ++

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/01/2008, 16h25
  2. Réponses: 2
    Dernier message: 21/04/2007, 20h19
  3. Problème d'espace disponible après suppression de données
    Par carjo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2006, 15h48
  4. [C#] [.NET CF] des fichiers de données avec l'application
    Par safisoft13 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/06/2005, 09h30
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo