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 :

Créer une nouvelle base de donnée avec le .bak d'une autre.


Sujet :

Administration SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut Créer une nouvelle base de donnée avec le .bak d'une autre.
    Bonjour à tous.tes

    Je reviens sur un sujet récurrent, en tout cas en apparence, car je n'ai pas trouvé la réponse à ma question. Même pas sur le web.
    Je suppose donc que ce n'est pas possible de le faire, mais, du coup, je trouve ça très bizarre.

    Pour créer une nouvelle base de donnée (DB_Dest) avec le .bak d'une autre (DB_Ori) (= dupliquer une base de données) sur le même serveur, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    RESTORE DATABASE DB_Dest
    FROM DISK = 'C:\DB\DB_Ori.bak' 
    WITH replace
    ,MOVE 'DB_Ori'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\DB_Dest.mdf'
    ,MOVE 'DB_Ori_log'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\DB_Dest.ldf'
    , MOVE 'memory_optimized_file'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\DB_Dest_memory_optimized_filegroup'
    ;
    Et quand je fais (après avoir fait un backup de la base) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    restore filelistonly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\DB_Dest.bak'
    je vois qu'il a gardé les noms logiques de DB_Ori.

    Du coup ma question: y a t-il quelque syntaxe qui cloche dans mon code ? J'ai essayé avec ou sans replace... Pareil.

  2. #2
    Invité
    Invité(e)
    Par défaut
    C'est ok ta façon de faire. Ce sont juste les noms logiques des datafiles par base de données.
    Je trouve ça aussi un peu weird que ça ne s'adapte pas directement mais il doit sûrement y avoir des dépendances dans les tables systèmes

    Tu peux éventuellement les modifier après la restauration de la nouvelle bd avec la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE [MaBd] MODIFY FILE (NAME=N'AncienNom', NEWNAME=N'NouveauNom')
    Cela dit, ça n'a tout de même que peu d'intérêt.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Merci 7gyY9w1ZY6ySRgPeaefZ.

    Je prends note que cela n'a pas d'importance.
    Mais alors j'ai un problème qui vient d'ailleurs. Il faut que je remette le doigt dessus.
    Le message d'erreur était ... is not a part of...
    Il faut que je reproduise.

    Par contre après avoir fait ALTER DATABASE [MaBd] MODIFY FILE (NAME=N'AncienNom', NEWNAME=N'NouveauNom') , il n'y a pas de changement dans le restore filelistonly. J'ai toujours les mêmes noms de fichiers logiques.
    Mais ça a modifié quelque chose, car si j'essaie de le relancer une 2e fois, il me dit que le fichier n'existe pas...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Mais alors j'ai un problème qui vient d'ailleurs. Il faut que je remette le doigt dessus.
    Le message d'erreur était ... is not a part of...
    Il faut que je reproduise.
    Besoin de plus d'information pour comprendre.

    Citation Envoyé par cestpasmoinonplus Voir le message
    Mais ça a modifié quelque chose, car si j'essaie de le relancer une 2e fois, il me dit que le fichier n'existe pas...
    Besoin de plus d'information pour comprendre.
    Tu relances quoi ? Le restore d'un nouveau backup ? Si tu as changé les noms logiques des datafiles, c'est qu'il faut que tu adaptes ton script de restore en conséquence.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Alors, j'ai reconstitué précisément mon pb :
    1) Je restaure une base existante en la renommant sur le même serveur :
    nouvelle base = BASE_A
    base d'origine = Base_Ori
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    RESTORE DATABASE BASE_A
     FROM DISK = 'C:\DB\Base_Ori.bak' 
    WITH 
    replace, RECOVERY 
    , MOVE 'Base_Ori'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\BASE_A.mdf'
    , MOVE 'Base_Ori_log'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\BASE_A.ldf'
    , MOVE 'memory_optimized_file'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\BASE_A_memory_optimized_filegroup'
    ;
    Aucun problème, il me crée ma nouvelle base.
    Je fais un backup de BASE_A = no problemo,
    mais quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    restore filelistonly from disk =  'C:\DB\BASE_A.bak'
    ;
    il me répond que les LogicalName des fichiers portent le nom de la base d'origine.

    Du coup, quand je fais :
    2) Restauration de BASE_A en la renommant sur le même serveur :
    nouvelle base = BASE_B
    base d'origine = Base_A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    RESTORE DATABASE BASE_B
     FROM DISK = 'C:\DB\BASE_A.bak' 
    WITH 
    replace, RECOVERY 
    , MOVE 'BASE_A'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\BASE_B.mdf'
    , MOVE 'BASE_A_log'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\BASE_B.ldf'
    , MOVE 'memory_optimized_file'  TO   'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\BASE_B_memory_optimized_filegroup'
    Il plante avec :
    Msg 3234, Level 16, State 2, Line 12
    Logical file 'BASE_A' is not part of database 'BASE_B'. Use RESTORE FILELISTONLY to list the logical file names.
    Msg 3013, Level 16, State 1, Line 12
    RESTORE DATABASE is terminating abnormally.

    J'aimerai en fait dupliquer une base existante sur le même serveur en faisant en sorte que la nouvelle base soit totalement indépendante des autres (rien que ça ).
    Quelqu'un aurait une idée ?

  6. #6
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Essaye un peu ce script, mais ça fait très longtemps que je ne l'ai plus utilisé, donc pas sûr que ce soit ce que tu recherches.

    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
    DECLARE @dbnametarget VARCHAR(255)
    DECLARE @dbnamesource VARCHAR(255)
    DECLARE @fileName VARCHAR(255)    -- backup file name
    DECLARE @mdfName VARCHAR(99)    
    DECLARE @ldfName VARCHAR(99)    
    DECLARE @ldfV VARCHAR(99)    
    DECLARE @SQL_SCRIPT varchar(max)
    DECLARE @newdbo varchar(99)
     
    SET @dbnamesource ='Toto1'
    SET @dbnametarget ='Toto99'
    SET @fileName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.INSTP01\MSSQL\Backup\'+@dbnamesource+'.bak'
    SET @mdfName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.INSTP01\MSSQL\DATA\'+@dbnametarget+'.mdf'
    SET @ldfName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.INSTP01\MSSQL\DATA\'+@dbnametarget+'_log.ldf'
    SET @ldfV = @dbnamesource+'_log'
    set @newdbo = 'sa'
     
     
    IF NOT EXISTS (SELECT name FROM master..sysdatabases WHERE name = @dbnametarget)
      BEGIN
        RESTORE FILELISTONLY   FROM  DISK = @fileName 
     
        RESTORE DATABASE  @dbnametarget 
        FROM  DISK = @fileName 
        WITH  FILE = 1,  
        MOVE @dbnamesource TO @mdfName,  
        MOVE @ldfV TO @ldfName,  
        NOUNLOAD,  STATS = 10
     
        SELECT @SQL_SCRIPT = 'ALTER DATABASE '+@dbnametarget + ' MODIFY FILE (NAME='+@dbnamesource+', NEWNAME='+@dbnametarget+');'
        EXECUTE (@SQL_SCRIPT)
        SELECT @SQL_SCRIPT = 'ALTER DATABASE '+@dbnametarget + ' MODIFY FILE (NAME='+@ldfV+', NEWNAME='+@dbnametarget+'_log);'
        EXECUTE (@SQL_SCRIPT)
      END
    ELSE
        BEGIN
        Print 'DB Target '+@dbnametarget+' already EXISTS'
    END
     
    SET @SQL_SCRIPT = 'EXEC ['+@dbnametarget+'].dbo.sp_changedbowner @loginame = '+@newdbo+', @map = false'
    EXECUTE(@SQL_SCRIPT)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    il me répond que les LogicalName des fichiers portent le nom de la base d'origine.
    Peut-on avoir le vrai message d'erreur stp ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Peut-on avoir le vrai message d'erreur stp ?
    C'est très exactement celui-ci.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par janlouk Voir le message
    Essaye un peu ce script, mais ça fait très longtemps que je ne l'ai plus utilisé, donc pas sûr que ce soit ce que tu recherches.
    Merci Janlouk, je vais essayer. C'est juste que ça me paraît lourd comme manip. En toute naïveté, je pensais que c'était possible de le faire avec une option quelconque de restore .

  10. #10
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Je t'avoue que j'ai du mal à comprendre d'où vient le soucis donc voici ce que j'ai essayé :

    J'ai fait via SSMS, graphiquement on va dire.

    Je prends ma DB d'origine, qui s'appelle DBAtools_test
    Je fais un full backup
    Dans la fenêtre de restore, je renomme la Db en DBAtools_test2, et je vais aussi renommer le .mdf et .ldf avant le restore.
    Et ça se passe très bien.
    Ensuite, pour tester, je fais un nouveau backup de DBAtools_test2 sans avoir changé les logical name, et je restore sur cette DB en demandant bien sûr un "overwrite" et ça passe.
    J'ai également, utilisé le backup de DBAtools_test2, pour créer DBAtools_test3 en simplement changé le nom et le nom des .mdf et .ldf et ça passe nickel.

    Et pour terminer, j'ai été changé le nom des logical name pour ne pas avoir les mêmes que la db d'origine.

    Alors soit je ne te comprends pas, soit tu te compliques la vie

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Ben graphiquement ça marche.
    Mais ce n'est pas avec SSMS que je dois le faire. C'est avec une requête, ou un script, lancée depuis mon appli.
    Manuellement, y a pas problème

    C'est juste que je n'ai pas trouvé l'option dans restore pour le faire. Avec la requête que je lance, il ne change pas le nom des fichiers logiques . D'où le soucis décrit.

  12. #12
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Et tu as essayé avec PowerShell ?

    Par exemple, DBATools ?

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Non, je n'ai pas regardé encore d'autres outils.
    J'espérais le faire simplement par SQL .
    Je vais creuser le(s) script(s) cet AM. Si je ne trouve rien, je regarderai les outils.

  14. #14
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Et après avoir fait le restore avec succès, avant le backup de cette "nouvelle", tu renommes les logical name. Ca ne fonctionne pas après?

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par janlouk Voir le message
    Et après avoir fait le restore avec succès, avant le backup de cette "nouvelle", tu renommes les logical name. Ca ne fonctionne pas après?
    Ben je n'ai pas réussi .
    J'ai essayé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE [MaBd] MODIFY FILE (NAME=N'AncienNom', NEWNAME=N'NouveauNom')
    de 7gyY9w1ZY6ySRgPeaefZ.
    Mais apparemment, ce n'est pas les logical name que ça renomme.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Mais apparemment, ce n'est pas les logical name que ça renomme.
    Y a des choses pas clairs dans ton affaire, c'est ça les logical names
    Nom : 4407_SQLServer.jpg
Affichages : 1306
Taille : 43,9 Ko
    Tu confonds pas avec les noms de fichier ? Tu es sûr qu'il n'y a pas de confusion ?

    Comment ça se fait que la commande de changement de nom logique ne marche pas ? Si ça ne marche pas, y a une erreur nécessairement ! Quelle est-elle ?
    Est-ce que tu te places sur la bonne bd ?

    Aide-toi, donnes-nous de l'information et des saisies d'écran, parce que là, on ne comprend pas vraiment après ta poignée de message.

  17. #17
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    Curieux, c'est bon pourtant.

    Voici quand je scripte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    USE [Test_Jluc_dbatools]
    GO
    ALTER DATABASE [Test_Jluc_dbatools] MODIFY FILE (NAME=N'Test_Jluc_dbatools', NEWNAME=N'Test_Jluc_dbatoolss')
    GO
    USE [Test_Jluc_dbatools]
    GO
    ALTER DATABASE [Test_Jluc_dbatools] MODIFY FILE (NAME=N'Test_Jluc_dbatools_log', NEWNAME=N'Test_Jluc_dbatoolss_log')
    GO

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Les logical name, c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    restore filelistonly from disk =  'C:\DB\BASE_A.bak';

  19. #19
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Aide-toi, donnes-nous de l'information et des saisies d'écran, parce que là, on ne comprend pas vraiment après ta poignée de message.
    Merci 7gyY9w1ZY6ySRgPeaefZ, mais toutes les requête saisies, sans exception, sont écrites dans le premier message.
    Au temps pour moi , dans le message de "Hier, 14h21"

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cestpasmoinonplus Voir le message
    Les logical name, c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    restore filelistonly from disk =  'C:\DB\BASE_A.bak';
    T'es sérieux ?
    Tu me montres un bout de code avec un fichier de backup et tu considères ça comme un logical name ???
    Je suis dans la bienveillance mais là, je passes mon tour, bonne chance à toi.

Discussions similaires

  1. [2008R2] Créer une nouvelle base de données avec un backup
    Par sarrabnh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/05/2015, 17h38
  2. comment créer une base de donnée avec SQL3 sous SYBASE ASE 12.5
    Par aminelp dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 09/08/2009, 18h24
  3. Réponses: 4
    Dernier message: 21/01/2009, 16h35
  4. Réponses: 2
    Dernier message: 01/02/2008, 16h00
  5. Créer une nouvelle base de données sur Oracle10g
    Par mariam2001 dans le forum Administration
    Réponses: 6
    Dernier message: 11/05/2007, 15h25

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