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

Développement SQL Server Discussion :

Un script pour faire des mises à jour


Sujet :

Développement SQL Server

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Un script pour faire des mises à jour
    Bonjour à tous.

    Je cherche à faire un système de mise à jour de mes développements de mon environnement de développement vers mon environement de production.

    Je m'explique : je fais des sites Web. J'ai ma machine qui est instalée avec un SQL express 2008 sur laquelle je fais des tables, des vues, des procédures stockées et des fonctions.
    Mon environnement de Production est un serveur dédié avec un SQL Express 2008 qui doit recevoir la même chose que ce que j'ai développé.

    J'ai fouillé dans les bases de donnée Master et tempDB, mais je n'ai pas trouvé les données que je cherche.

    L'idée est de lancer une procédure stockée qui va aller chercher toutes les modifications et les créations d'objet par rapport à une date donnée (qui serait un paramettre de la PS). Une fois trouvé les objets concernés, la PS va fabriquer un Script de création ou modification (selon le cas) que je n'aurais plus qu'à passer sur l'environnement de Production pour avoir une structure de donnée équivalente.

    Deux soucis :
    - je ne trouve pas les données qui concerne les dates de création ou de modification des objets
    - je ne sais pas comment générer un script à partir d'une procédure stockée.

    Eventuellement (mais là, je ne sais pas si le principe existe) je peux mettre en liaison les deux environnements. Mon serveur étant un serveur dédié, je fais ce que je veux (au sens autorisation du terme). Donc s'il existe un moyen de faire cette "mise à jour" directement entre serveur SQL, je suis preneur de l'idée.

    Pouvez vous m'aider ?

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    Bonjour, si tu veux faire le script toi-même, c'est très courageux

    Déjà, il y a un outil gratuit qui te permet de visualiser les différences de
    structure entre deux base SQL Server : http://www.sqldbtools.com/Default.aspx?LanguageId=FR

    Si j'ai bien compris, tu souhaite déployer tes mises à jour sur la base
    de production. Je ne vois pas l'intérêt de la date dans la démarche.

    Pour mettre à jour tous les objets (sauf les tables),
    le plus simple est de générer un script qui supprime et recrée les objets de la base :
    - vues
    - triggers
    - ps
    - udf

    Pour les tables, c'est plus délicat.
    Au moment où tu modifies une table dans l'environnement de développement,
    il est possible de générer le script de modification (ALTER TABLE ...)
    et de le passer ensuite sur la table de la base de production.

    C'est vrai que c'est un peu laborieux mais c'est toujours mieux que d'essayer de générer le script soi-même.

    Enfin ils existe aussi des outils payants qui font ce travail.

  3. #3
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton aide.

    Je vais aller voir ton lien et étudier cela.

    La date est un point de référence pour moi, histoire de ne pas avoir à recréer tout les objets à chaque fois que je fais une mise à jour.
    Je m'aperçois que je n'ai pas bien exprimé un détail : mon idée et de faire de la mise à jour régulière, genre tous les jours, pour envoyer mon travail de la journée vers la Prod. Donc biensûr, lorsque je parle de Date j'y inclu l'heure.

    Et donc, du coup, ton idée de rebalancer tous les objets, sans quelle soit mauvaise, n'est pas facilement applicable dans mon cas. La lourdeur de l'action va gravement entacher les perf de mon serveur, sans compter le fait que pendant que les objets sont supprimés (certes pas longtemps) les visiteurs des sites vont se retrouver avec des messages d'erreur violents.

    Voilà pourquoi j'aimerais bien savoir où sont cachées les données sur les objets. Ainsi je pourrais faire un truc personnalisé qui aurait un minimum d'impact sur le serveur de Production.

    Pour être encore plus précis : sur mon serveur j'ai fais un environement de Production ET un environnement de PréProduction, réplique quasi exacte de la Production, avec juste un temps d'avance pour que le Client puisse tester en Live les modifcations et amélioration que j'apporte à son site. Du coup, je transfert de Dev vers PreProd, je teste et fais tester et ensuite je transfert de PreProd vers Pord toujours avec le même outils, qui pourrait également me faire une sorte de versionning (mais trés léger).

    Voilà, je suis conscient que c'est un poil ambitieux, mais il faut que je me fabrique les bons outils pour pouvoir bien travailler et être perfomant. Si j'arrive à réduire la mise à jour du travail à cliquer sur un bouton, je gagne un temps monstrueux, donc de l'argent.....

    Encore merci pour ton aide et bonnes fêtes.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    La liste des objets et leurs contenus se trouve dans la table Sysobjects

    Cependant, je n'y ai pas vu de date de modification. Pour moi, il faut effectuer une comparaison objet par objet.

    Je voulais faire exactement ce que tu as décris. Mais avec l'expérience,
    je me suis rendu compte que certaines parties du développement pouvaient être en chantier assez longtemps alors qu'il faillait livrer d'urgence des correctifs.

    Pour moi, le système d'intégration continu n'est donc pas adapté.
    C'est pourquoi j'utilise ce comparateur de base qui se contente de m'indiquer les différences et ensuite, je décide de ce que je mets à jour.

    Bon courage et bonnes fêtes.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    La liste des objets et leurs contenus se trouve dans la table Sysobjects

    Cependant, je n'y ai pas vu de date de modification. Pour moi, il faut effectuer une comparaison objet par objet.

    Je voulais faire exactement ce que tu as décris. Mais avec l'expérience,
    je me suis rendu compte que certaines parties du développement pouvaient être en chantier assez longtemps alors qu'il faillait livrer d'urgence des correctifs.

    Pour moi, le système d'intégration continu n'est donc pas adapté.
    C'est pourquoi j'utilise ce comparateur de base qui se contente de m'indiquer les différences et ensuite, je décide de ce que je mets à jour.

    Bon courage et bonnes fêtes.
    Pas mieux !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Je confirme la dangerosité de transférer les objets de façon automatique sur la production sans passer par une étape être humain qui vérifie qu'on n'est pas dans un état instable au moment de la réplication.

    Pour résoudre un problème similaire, je me suis écrit un utilitaire qui génère les scripts de création, modification ou suppression de fonctions, vues, procédures stockées dont les noms d'objets sont dans un fichier de configuration xml.
    Au fur et à mesure de mes développement je rajoute le nom des objets modifié et quand je suis sure de moi je génère le script.
    Pour générer le script j'appelle depuis vb.net la procédure stockée
    Inconvénient il ne faut des retours chariot fréquents, car sp_helptext tronque au bout d'un certain nombre de caractère, cette limitation ne m'a gênée qu'une seule fois en 4 ans d'utilisation de l'outil.
    Pour les modifications de tables, je crée les scripts au fur et à mesure.
    Cordialement
    Soazig

  7. #7
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour votre aide et vos avis.

    Je partage pas mal de point et je découvrir des failles dans mon idée de base.
    En gros, vous êtes en train de m'éviter de faire une connerie, et ça, je trouve ça cool.....

    Pour revenir sur le détail :
    - sp_helptext MonObjet, ça sert à fabriquer un script automatique ?
    - merci pour la table sysobject, je vais aller voir (on aprle bien de celle qui dans la base concernée ?)
    - quand à la date, elle existe obligatoirement, le studio management la donne, donc il va la chercher quelque part.

    PS : ce matin étude approfondie de sqldbtool

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Pour mettre à jour tous les objets (sauf les tables),
    le plus simple est de générer un script qui supprime et recrée les objets de la base :
    - vues
    - triggers
    - ps
    - udf
    Oui, Dans ce cas, penser aussi aux privilèges qui risquent de sauter en même temps que les objets.
    Et pour des (mauvaises) raisons pratiques, les privileges ne sont pas toujours les mêmes en prod et en dev (les fameux comptes pseudo admin qui ont accès a tout, utilisés pour développer...)

    Attention aussi aux vue indexées. Le temps de suppression/recreation avec les index peut être long...

    Citation Envoyé par Népomucène Voir le message
    Je voulais faire exactement ce que tu as décris. Mais avec l'expérience,
    je me suis rendu compte que certaines parties du développement pouvaient être en chantier assez longtemps alors qu'il faillait livrer d'urgence des correctifs.

    Pour moi, le système d'intégration continu n'est donc pas adapté.
    C'est pourquoi j'utilise ce comparateur de base qui se contente de m'indiquer les différences et ensuite, je décide de ce que je mets à jour.
    Oui, moi je fais dans le même genre. J'ai fait des scripts en Powershell pour vérifier la différence entre plusieurs BDD.
    Ça me génère des scripts drop/create pour les objets autres que les tables
    pour les tables, ca m'indique les différences (en commentaire dans le script). Je crée ensuite les scripts de modif a la main (de toute façon, avec les éventuelles contraintes, il y a souvent un ordre précis pour modifier les tables...)

    Ca me génère aussi le script qui va bien pour les privilèges...

    Mais dans tous les cas, je ne lance jamais ces scripts sans une relecture avant, et test sur serveur d'integration !
    Citation Envoyé par soazig
    Je confirme la dangerosité de transférer les objets de façon automatique sur la production sans passer par une étape être humain qui vérifie qu'on n'est pas dans un état instable au moment de la réplication



    Cela dit, c'est vrai que des solutions plus automatisées, ca fait rêver

Discussions similaires

  1. Impossible de faire des mises à jour de sécurité
    Par Stargate SG1 dans le forum Windows Vista
    Réponses: 12
    Dernier message: 04/12/2010, 19h12
  2. Script pour faire des rapports
    Par fourniey dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 16/05/2008, 16h29
  3. Faire des mise à jour
    Par freerider74 dans le forum C#
    Réponses: 19
    Dernier message: 10/04/2008, 16h37
  4. [MySQL] j'ai un probléme pour faire la mise à jour de ma table mysql
    Par kebson dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/06/2007, 17h50
  5. Réponses: 1
    Dernier message: 08/02/2007, 11h11

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