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 :

RESOTORE DATABASE WITH FILE


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut RESOTORE DATABASE WITH FILE
    bonsoir à tous!

    j'ai besoin de restaurer une base de données avec une unité de sauvegarde qui contient plusieurs fichiers de sauvegarde. Le problème est que j'aimerais restaurer le dernier fichier sans avoir à connaitre son numéro.

    Quand je fais 'RESTORE DATABASE' sans l'option 'WITH FILE', le fichier restauré par défaut est le premier.

    Merci d'avance pour vos suggestions!!!
    Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
    ________________________________________________________________________________________________________________________________________
    "Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau

  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 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Il faut aller voir combien il y a de fichier et prendre le dernier en faisant la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RESTORE FILELISTONLY FROM DISK = ....
    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 habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    en supposant que le fichier de la dernière sauvegarde porte le numéro 40, pour restaurer ma base avec ce dernier, j'aurai simplement à faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RESTORE DATABASE MA_BASE FROM MON_UNITE_DE_SAUVEGARDE WITH FILE=40
    Mais le problème que je pause actuellement est que j'aimerais le faire sans connaître préalablement ce numéro 40 parsque la base de données est sur un site distant et les utilisateurs ne peuvent pas me renseigner sur ce détail. Je leur envoie simplement un script avec un fichier d'exécution en lot.

    N'est-il donc pas possible de connaître ce dernier numéro via une instruction SQL?
    Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
    ________________________________________________________________________________________________________________________________________
    "Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau

  4. #4
    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,

    Peut-être qu'en fouillant les tables dont le nom commence par "backup" dans la base de données msdb, vous trouverez ce dont vous avez besoin.

    Sinon, à part en récupérant le résultat de la commande RESTORE FILELISTONLY comme le disait SQLPro, avec du SQL dynamique, je ne vois pas ...

    @++

  5. #5
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RESTORE FILELISTONLY FROM FAUCON_TRAFIC_2009
    Voici le résultat!
    FAUCON_Trafic_2009_Data C:\Program Files\Microsoft SQL Server\MSSQL$COSTADATA\data\FAUCON_Trafic_2009_Data.MDF D PRIMARY 20054016 35184372080640
    FAUCON_Trafic_2009_Log C:\Program Files\Microsoft SQL Server\MSSQL$COSTADATA\data\FAUCON_Trafic_2009_Log.LDF L NULL 1048576 35184372080640
    Et franchement, je ne sais que faire avec ce résultat pour atteindre mon objectif!!!
    Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
    ________________________________________________________________________________________________________________________________________
    "Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau

  6. #6
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Pour ce qui concerne les tables commencant par BACKUP dans la base de données MSDB, j'en ai trouvées 4! Mais après une fouille minitieuse, j'ai rien trouvé qui puisse m'aider!!!
    Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
    ________________________________________________________________________________________________________________________________________
    "Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau

  7. #7
    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
    Ha ben fallait le dire que vous utilisez SQL Server 2000 ...

    On vous a répondu cela parce que la même instruction sous SQL Server 2005 ou 2008 retourne autant de lignes que de fichier comme sous SQL Server 2000, mais bien plus de colonnes, dont une nommée FileId.

    Néanmoins la commande RESTORE HEADERONLY sous SQL Server 2000 nous retourne une colonne position

    @++

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Créez une table temporaire ayant la même structure que la table résultant de la requête RESTORE FILELISTONLY :
    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
    CREATE TABLE #BACKUPS
    (LogicalName          nvarchar(128),
     PhysicalName         nvarchar(260),
     "Type"               char(1), 
     FileGroupName        nvarchar(128),
     Size                 numeric(20,0),
     MaxSize              numeric(20,0),
     FileID               bigint,
     CreateLSN            numeric(25,0), 
     DropLSN              numeric(25,0),
     UniqueID             uniqueidentifier,
     ReadOnlyLSN          numeric(25,0),
     ReadWriteLSN         numeric(25,0),
     BackupSizeInBytes    bigint,
     SourceBlockSize      int,
     FileGroupID          int,
     LogGroupGUID         uniqueidentifier,
     DifferentialBaseLSN  numeric(25,0),
     DifferentialBaseGUID uniqueidentifier,
     IsReadOnly           bit,
     IsPresent            bit,
     TDEThumbprint        varbinary(32));
    Injectez les méta données de backup dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO #BACKUPS
    EXEC ('RESTORE FILELISTONLY FROM DISK = ''...''') ;
    Extrayez le dernier fileId et réinjectez le dans la commande de restauration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @FILE BIGINT;
     
    SELECT @FILE = MAX(FileID)
    FROM #BACKUPS;
     
    RESTORE DATABASE ???
    FROM DISK = '...'
    WITH FILE = @FILE;
    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/ * * * * *

  9. #9
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Néanmoins la commande RESTORE HEADERONLY sous SQL Server 2000 nous retourne une colonne position
    @++

    le numéro que je recherche se trouve effectivement dans la colonne POSITION à la dernière ligne du résultat.

    Le problème à présent est comment l'obtenir avec une requête. Je me servirai de la méthode de SQL Pro; donc il va falloir déterminer la structure de la table à créer.
    Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
    ________________________________________________________________________________________________________________________________________
    "Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau

  10. #10
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO #BACKUPS
    EXEC ('RESTORE FILELISTONLY FROM DISK = ''...''') ;
    le RESTORE FILELISTONLY me donne toujours deux lignes qui comportent des informations sur le fichier de données et le fichier de journal. et ne je ne retrouve pas de colonne nommée FILEID.

    J'ignore si ceci est du à la version de sql server que j'utilise. (il s'agit notamment du 2000)
    Les problèmes les plus complexes requièrent parfois les solutions les plus simples ...
    ________________________________________________________________________________________________________________________________________
    "Le plus fort n'est jamais assez fort pour être le maître, s'il ne transforme pas sa force en droit et son obéissance en devoir." J.J. Rousseau

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    hue, c'est moi qui me suis trompé, il faut effectivement utiliser RESTORE HEADERONLY....

    Revoyez l'ensemble de la proc. L'esprit y est !

    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/ * * * * *

Discussions similaires

  1. not connected to auxiliary database with a net service name
    Par agdid04 dans le forum Administration
    Réponses: 4
    Dernier message: 25/05/2013, 15h06
  2. [nested?] non-relational database with active record
    Par vinczente dans le forum Ruby
    Réponses: 1
    Dernier message: 12/07/2009, 02h51
  3. Embedded Database with VB.NET
    Par Abdelkabir dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/01/2008, 22h43
  4. tutoriel : Database.Open-Could not use, file already in use
    Par MARTIN Gérard dans le forum XMLRAD
    Réponses: 2
    Dernier message: 04/05/2005, 11h56

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