locked
Exporter une base de données RRS feed

  • Question

  • Bonjour,

    J'ai créé une base de données avec SQL Server Management Studio 2008 et mon programme WPF interagit avec elle. Bien.

    Je voudrais porter cette base sur une autre machine de développement. Comment faire cela ? J'ai pensé à un fichier .mdf mais comment obtenir ce fichier à partir de la base ?

    Sur cette autre machine c'est seulement SQL Server 2005 Express qui est installé. Ma base de données construite sous 2008 Express sera t-elle compatible avec 2005 (je n'utilise que des tables et des vues simples) ?

    Merci.

    Alain
    vendredi 26 juin 2009 09:07

Réponses

  • Bonjour,

    Le fichier .mdf contient les données ( tables ). Dans votre cas, il ne doit pas s'agir d'une grosse base de données pour laquelle vous pourriez avoir été amené à créer plusieurs "FILEGROUPs" ( en plus du PRIMARY ), vous pourriez avoir eu des fichiers .ndf.
    Le fichier .log ( fichier log des transactions ) a une extension .ldf. Il n'est pas forcément nécessaire pour une "copie" mais bien souvent la "copie" est plus facile ( et surtout plus simple de syntaxe )

    2 solutions :
    - le backup / restore ( vous faites une sauvegarde SQL Server , ce qui fait que tout est sauvegardé dans un fichier qui peut être copié soit par réseau, soit sur un CD/DVD et ensuite une restauration SQL Server ). C'est simple , rapide et théoriquement sans problème.
    - le detach/attach. Il est possible de détacher une base de données de son instance SQL Server, de copier les fichiers ( ceux avec les extensions .mdf,.ndf,.ldf ) sur un CD/DVD , de les copier sur la nouvelle machine et de réattacher la base à votre nouvelle instance ( plus exactement les fichiers .mdf,.ndf,.ldf à la nouvelle instance ).
    Bien entendu, si vous utilisez un CD/DVD pour le transfert des fichiers, il ne faudra pas oublier de mettre les fichiers copiées en WRITE et non en Read-Only ( petit oubli classique ).

    Le gros hic est que vous ne pouvez pas théoriquement attacher une base créée sur SQL Server 2008 à une instance SQL Server 2005 ( sauf si vous avez modifié la propriété CompatibilityLevel de 100 à 90 pour la base ).
    Même problème avec un backup 2008 qui ne peut pas être restauré sur une instance 2005
    voir les liens :
     http://msdn.microsoft.com/fr-fr/library/ms176061.aspx
    bien lire la note juste après le paragraphe FOR ATTACH

    http://msdn.microsoft.com/fr-fr/library/ms186858.aspx
    bien lire la note du début  sur l'impossibilité de la restauration d'une base sur une instance moins récente ( 2008 ==> 2005 )

    La seule méthode susceptible de marcher est le detach/attach sur une base de compatibiltylevel = 90 ( et çà ne marche que une fois sur 2 )

    Il reste une dernière solution ( peu pratique avec des instances SQL Server Express ) : le "wizard" d'exportation/importation de bases ( structure/données ) mais il peut y avoir des problèmes de SQL Agent.

    N'hésitez pas à poster à nouveau plus d'aide ou d'explications ( la copie de bases d'une instance à une autre est un problème trop souvent présenté comme simple, mais il peut y avoir des ennuis surtout si la copie se fait d'une instance vers une instance "plus vieille" )

    Bonne journée

    PS : j'ai relu vôtre post . Pourriez vous préciser l'édition de votre SQL Server 2008 (Express/Standard/Entreprise/Dev) ? ( il y a un petit espoir si votre SQL Server 2008 est au moins Standard  et que vous avez une liaison réseau avec votre SQL Server 2005 Express ) 
    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    • Marqué comme réponse AchLog mercredi 8 juillet 2009 14:38
    vendredi 3 juillet 2009 20:11

Toutes les réponses

  • Bonjour,

    Le fichier .mdf contient les données ( tables ). Dans votre cas, il ne doit pas s'agir d'une grosse base de données pour laquelle vous pourriez avoir été amené à créer plusieurs "FILEGROUPs" ( en plus du PRIMARY ), vous pourriez avoir eu des fichiers .ndf.
    Le fichier .log ( fichier log des transactions ) a une extension .ldf. Il n'est pas forcément nécessaire pour une "copie" mais bien souvent la "copie" est plus facile ( et surtout plus simple de syntaxe )

    2 solutions :
    - le backup / restore ( vous faites une sauvegarde SQL Server , ce qui fait que tout est sauvegardé dans un fichier qui peut être copié soit par réseau, soit sur un CD/DVD et ensuite une restauration SQL Server ). C'est simple , rapide et théoriquement sans problème.
    - le detach/attach. Il est possible de détacher une base de données de son instance SQL Server, de copier les fichiers ( ceux avec les extensions .mdf,.ndf,.ldf ) sur un CD/DVD , de les copier sur la nouvelle machine et de réattacher la base à votre nouvelle instance ( plus exactement les fichiers .mdf,.ndf,.ldf à la nouvelle instance ).
    Bien entendu, si vous utilisez un CD/DVD pour le transfert des fichiers, il ne faudra pas oublier de mettre les fichiers copiées en WRITE et non en Read-Only ( petit oubli classique ).

    Le gros hic est que vous ne pouvez pas théoriquement attacher une base créée sur SQL Server 2008 à une instance SQL Server 2005 ( sauf si vous avez modifié la propriété CompatibilityLevel de 100 à 90 pour la base ).
    Même problème avec un backup 2008 qui ne peut pas être restauré sur une instance 2005
    voir les liens :
     http://msdn.microsoft.com/fr-fr/library/ms176061.aspx
    bien lire la note juste après le paragraphe FOR ATTACH

    http://msdn.microsoft.com/fr-fr/library/ms186858.aspx
    bien lire la note du début  sur l'impossibilité de la restauration d'une base sur une instance moins récente ( 2008 ==> 2005 )

    La seule méthode susceptible de marcher est le detach/attach sur une base de compatibiltylevel = 90 ( et çà ne marche que une fois sur 2 )

    Il reste une dernière solution ( peu pratique avec des instances SQL Server Express ) : le "wizard" d'exportation/importation de bases ( structure/données ) mais il peut y avoir des problèmes de SQL Agent.

    N'hésitez pas à poster à nouveau plus d'aide ou d'explications ( la copie de bases d'une instance à une autre est un problème trop souvent présenté comme simple, mais il peut y avoir des ennuis surtout si la copie se fait d'une instance vers une instance "plus vieille" )

    Bonne journée

    PS : j'ai relu vôtre post . Pourriez vous préciser l'édition de votre SQL Server 2008 (Express/Standard/Entreprise/Dev) ? ( il y a un petit espoir si votre SQL Server 2008 est au moins Standard  et que vous avez une liaison réseau avec votre SQL Server 2005 Express ) 
    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    • Marqué comme réponse AchLog mercredi 8 juillet 2009 14:38
    vendredi 3 juillet 2009 20:11
  • Bonjour et merci beaucoup Papy Normand pour votre aide décisive.

    J'ai utilisé la méthode du backup / restore que vous indiquez. Elle fonctionne bien et j'ai pu faire passer ma base de données (petite en effet) de SQL Server Express 2005 vers SQL Server Express 2008 sans problème. Dans SQL Server Studio Express j'ai fait le backup de <MaBase> et j'ai obtenu un fichier <MaBase>.bak que j'ai transféré via mon réseau vers la seconde machine. Le point "délicat" concerne la localisation du fichier sauvegardé <MaBase>.bak mais ça se fait quand même assez facilement...

    Sur la seconde machine, sous SQL Server Studio Express 2008, j'ai fait un restaure d'une nouvelle base et ça a fonctionné tout seul. J'ai dû simplement définir les propriétaires de la base sur la machine cible.

    Je n'ai pas essayé la solution detach / attach mais elle est bonne à connaître.

    Papy Normand, puis abuser en vous demandant comment, depuis une machine (disons 1) accéder par programme, via mon réseau local,  à une base de données situé sur une autre machine (disons 2) ? La base en question étant attachée à une instance SQL Server Express. Je suppose qu'il s'agit de définir la chaîne de connexion et les autorisations. Mais comment faire cela précisément ?

    Ceci éviterait de transporter la base d'une machine à l'autre comme je viens de le faire.

    Encore merci.
    Bonne journée.
    Alain
    • Modifié AchLog mercredi 8 juillet 2009 15:00
    mercredi 8 juillet 2009 14:57