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

MS SQL Server Discussion :

Liste des bases et noms logiques de fichiers


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Points : 324
    Points
    324
    Par défaut Liste des bases et noms logiques de fichiers
    Bonjour, je cherche à générer un fichier avec les infos:

    nom_base nom_logique_fichier_data nom_logique_fichier_log
    Avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select a.name AS DB_NAME, b.name as DB_FILE 
    from sysdatabases a, sysaltfiles b 
    where a.dbid = b.dbid order by a.name
    Je n'arrive pas à avoir le fichier dans le bon format. Quelqu'un pourrait-il m'aider ?

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Avec quel client penses-tu générer le fichier ?

  3. #3
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Points : 324
    Points
    324
    Par défaut
    Je le fais tout bêtement avec une commande "osql -o" ... J'ai une cinquantaine de bases sur ce serveur. A partir de ce fichier obtenu, je veux générer un script SQL de rechargement (RESTORE DATABASE avec move d'où le besoin des nom logiques des fichiers) à l'aide de CYGWIN (eh oui ... je viens du monde UNIX, je suis toujours plus à l'aise avec ces outils plutôt qu'avec du Microsoft) pour charger les dumps de ces bases sur un autre serveur.

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Pourquoi ne pas directement générer la commande de restore, avec un SELECT du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select 'RESTORE DATABASE [' + a.name + '] ...'
    from sysdatabases a, sysaltfiles b
    where a.dbid = b.dbid order by a.name

  5. #5
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Points : 324
    Points
    324
    Par défaut
    Je serais preneur pour une requête de ce genre ... Mais c'est justement le [...] qui m'interesse. Comment y mettre les noms logiques du fichier data et log de chaque base pour la partie WITH MOVE de la commande RESTORE DATABASE ??

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    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 888
    Points : 53 121
    Points
    53 121
    Billets dans le blog
    6
    Par défaut
    Attention : automatiser cela est EXTREMENENTdangereux. EN effet votre base de données peut être composée de multiples fichiers et non de deux.
    les données peuvent être réparties dans différents fichiers.
    Le journal peut être fractionné en plusieurs fichiers.

    Or dans votre logique vous supposez qu'il n'y aura jamais que deux fichiers, l'un de data, l'autre de log.

    Enfin, automatiser la restauration est utopique compte tenu des innombrables cas de figure possible comme la récupération partielle ou la reprise à une heure précise.

    mais effectivement vouspouvez vous baser sur un script SQL généré par une requête :

    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
    -- à partir de cette requête :
    SELECT DB_NAME(dbid) DB_NAME, 
           name as DATA_FILE, 
           (SELECT name 
            FROM   master.dbo.sysaltfiles
            WHERE  status & 64 = 64
              AND  dbid = f.dbid) AS LOG_FILE
    FROM   master.dbo.sysaltfiles f
    WHERE  status & 64 <> 64
     
    -- vous pouez faire :
    select 'RESTORE DATABASE ' + DB_NAME
           + ' FROM DISK=''???''' 
           + ' WITH MOVE ' + RTRIM(DATA_FILE)  + ' TO ''???'','
           + ' MOVE ' + RTRIM(LOG_FILE)  + ' TO ''???'''
    from  (SELECT DB_NAME(dbid) DB_NAME, 
                  name as DATA_FILE, 
                  (SELECT name 
                   FROM   master.dbo.sysaltfiles
                   WHERE  status & 64 = 64
                     AND  dbid = f.dbid) AS LOG_FILE
           FROM   master.dbo.sysaltfiles f
           WHERE  status & 64 <> 64) T
    Attention cepandant, la valeur 64 de status est à usage interne uniquement, ce qui veut dire qu'elle peut êtreb changée par MS sans préavis.

    A +

  7. #7
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Points : 324
    Points
    324
    Par défaut
    Je ne dois faire cette opération qu'une seule fois ... Et je suis sûr que chaque base n'a qu'un seul fichier data et un seul fichier log.
    Par contre, en jouant le script, j'ai le message d'erreur suivant:
    Serveur*: Msg 512, Niveau 16, État 1, Ligne 1
    La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.

  8. #8
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Points : 324
    Points
    324
    Par défaut
    Bon, finallement j'ai quand même dû finaliser le script à la main. C'était une opération one-shot de toutes façons. Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment connaitre le nom du serveur sql et la liste des bases
    Par inter_amine dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/04/2007, 18h32
  2. [MySQL] Obtenir la liste des bases de données
    Par cooper_sunz dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/08/2005, 09h50
  3. Réponses: 9
    Dernier message: 25/07/2005, 15h56
  4. Liste des bases d'un serveur SQL Server
    Par ZeKlubb dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/03/2005, 18h18
  5. [C#] [SQL Server] Récupérer la liste des bases d'un serveur.
    Par exe dans le forum Accès aux données
    Réponses: 2
    Dernier message: 05/08/2004, 17h40

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