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 :

Livrer une base de données


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut Livrer une base de données
    Bonjour,
    je dois livrer une application que j'ai développée, ainsi que sa base de données sous Sql server 2005.
    Il me faut la structure des tables ainsi que les données de certaines tables de paramétrage nécessaires au bon fonctionnement de l'application.
    J'ai remarqué que l'outil de génération automatique de sql server était assez lent, et qu'il ne me proposait pas de choisir uniquement les tables dont j'ai besoin pour exporter les données.
    En gros, comment préparer une base de données pour une livraison au client ?

  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 850
    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 850
    Points : 52 984
    Points
    52 984
    Billets dans le blog
    6
    Par défaut
    1) obtenir le script de création des objets par l'IHM
    2) faire un export au format natif bcp pour chaque table de paramétrage
    3) lancer le script sur le serveur cible
    4) importer les tables par bcp
    Tout ceci pouvant se faire dans un assortiment de fichier au niveau cmd.

    A +

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

    Pourquoi ne pas restaurer une sauvegarde complète de votre base de données sur la machine de votre client ?

    @++

  4. #4
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    1) obtenir le script de création des objets par l'IHM
    Citation Envoyé par SQLpro Voir le message
    2) faire un export au format natif bcp pour chaque table de paramétrage
    Comment on fait ça ?
    Citation Envoyé par SQLpro Voir le message
    3) lancer le script sur le serveur cible
    4) importer les tables par bcp
    Tout ceci pouvant se faire dans un assortiment de fichier au niveau cmd.
    Alors je veux bien que tu m'explique en détails . D'ailleurs ce serait plus simple, de tout faire en ligne de commandes, et récuperer un seul fichier sql que j'utiliserait chez le client
    Citation Envoyé par elsuket Voir le message
    Pourquoi ne pas restaurer une sauvegarde complète de votre base de données sur la machine de votre client ?
    C'est ce que j'ai fait pour la première livraison. Cela dit ce n'est pas très propre car même si j'efface mes données de test, les id continueront à s'incrémenter après le dernier id inséré en phase de test.
    Tu fais comme ça toi ? Donne moi tes retours

  5. #5
    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
    Pour obtenir le script de création de tous les objets de la base de données :

    - clic droit sur la base de données | Tâches | Générer des scripts
    - choisissez la base de données
    - cochez la case "Générer un script pour tous les objets de la base de données sélectionnée"
    - cliquez sur "Suivant" puis sur "Terminer"

    Pour faire un export au format natif bcp pour chaque table de paramétrage, vous devrez utiliser du SQL dynamique pour construire la chaîne de requête pour chacune de vos tables, à l'image du code qui est dans ce billet que j'ai écrit pour exporter le code des modules SQL.

    Pour lancer le script sur le serveur cible, vous devrez utilser l'utilitaire en ligne de commande SQLCMD pour vous connecter à la machine cliente et exécuter le script de création de tous les objets de votre base de données. Cela suppose que vous ayez ajouté en tête de ce script CREATE DATABASE maBD, avec éventuellement toutes les options de base de données et la taille des fichiers.
    Utilisez le commutateur -i pour passer en paramètre le script de création des objets, et éventuellement -o pour en recueillir dans un fichier texte le résultat de l'exécution des diverses commandes de votre script.

    Pour importer les données dans les tables que vous aurez créées, vous devrez utiliser, comme vous le dit SQLPro, l'utilitaire en ligne de commandes BCP, mais cette fois avec le commutateur "in".

    Comme vous utiliserez BCP et SQLCMD qui sont en ligne de commande, vous pouvez tout réaliser dans un batch DOS.

    Si vous souhaitez passer une une restauration d'une sauvegarde complète, il vous suffit de restaurer dans une base de données distincte une sauvegarde complète sur le serveur de test.
    Ensuite il vous suffit de vider les données de test, et pour réinitialiser la valeur du compteur d'auto-incrémentation des colonnes qui ont cette propriété, d'utiliser, toujours en SQL dynamique, DBCC CHECKIDENT
    Ensuite il vous faudra réaliser une sauvegarde complète de cette base de données puis la restaurer sur le serveur cible, ce que vous pouvez faire avec SQLCMD.

    Bref, à vous de choisir

    @++

  6. #6
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Ensuite il vous suffit de vider les données de test, et pour réinitialiser la valeur du compteur d'auto-incrémentation des colonnes qui ont cette propriété, d'utiliser, toujours en SQL dynamique, DBCC CHECKIDENT
    Il faudrait faire cette commande une table après l'autre ?

  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
    Oui, malheureusement vous n'avez pas le choix

    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
    -- Recherche des table qui ont une colonne identité
    DECLARE curTables CURSOR FOR
    	SELECT T.name
    	FROM sys.tables AS T
    	JOIN sys.columns AS C
    		ON T.object_id = C.object_id
    	WHERE T.name NOT LIKE 'sys%'
    	AND T.name NOT LIKE 'dt%'
    	AND C.is_identity = 1
    FOR READ ONLY
     
    DECLARE @nomTable SYSNAME,
    		@SQL VARCHAR(1024)
     
    -- Pour chacune des tables, réinitialisation de la valeur du compteur
    -- de la colonne ayant la propriété d'auto-incrémentation
    OPEN curTables
    FETCH NEXT FROM curTables INTO @nomTable
    WHILE @@FETCH_STATUS = 0
    BEGIN
    	SET @SQL = 'DBCC CHECKIDENT(''' + @nomTable + ''', RESEED, 0)'
     
    	PRINT @SQL
    	-- EXEC (@SQL) -- A décommenter pour exécution
     
    	FETCH NEXT FROM curTables INTO @nomTable
    END
    DEALLOCATE curTables
    @++

  8. #8
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Ok super la commande !
    Elle réinitialise également les id des tables de paramétrages ? Donc si tu as le dernier d'une table = 6, l'id de la prochaine insertion sera bien 7 ?

  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
    J'ai mis DBCC CHECKIDENT avec la valeur de départ à 0, donc la colonne d'identité lors votre prochaine insertion, dans une des tables ramenées par le SELECT qui spécifie le curseur, prendra la valeur 1.

    Peut-être n'ai-je pas bien compris ce que vous vous voulez faire ...

    @++

  10. #10
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Si si c'est bien ça, mais pour les tables contenant déja des valeurs (les tables de paramétrages) je me demande ce qu'il advient des id déja présents

  11. #11
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Comment SQL Serveur pourrait il faire tout seul la différence entre une table ayant une colonne IDENTITY() et vos tables de paramétrage ?

    Pour ces tables, soit vous filtrez sur T.name, soit vous n'utilisez pas d'IDENTITY() si ce sont des tables remplies "à la main" et en lecture seule pour l'application.

    @+

  12. #12
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par agemis31 Voir le message
    Comment SQL Serveur pourrait il faire tout seul la différence entre une table ayant une colonne IDENTITY() et vos tables de paramétrage ?
    En effet, il ne peut pas. C'est pourquoi je demande ce qu'il advient des id déja dans la table.
    Pour ces tables, soit vous filtrez sur T.name, soit vous n'utilisez pas d'IDENTITY() si ce sont des tables remplies "à la main" et en lecture seule pour l'application.
    @+
    Ok j'ai une préférence pour la deuxième solution.Merci

Discussions similaires

  1. Quels logiciels de modélisation pour une base de données ?
    Par octopus dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 11/06/2023, 16h20
  2. Livrer une base de données avec son application
    Par tevious dans le forum Débuter
    Réponses: 2
    Dernier message: 10/02/2014, 17h53
  3. [Strategie][Java][XML] Import dans une base de données
    Par nad dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/09/2002, 11h12
  4. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

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