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 :

Déploiement BDD avec spécificités selon l'instance


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut Déploiement BDD avec spécificités selon l'instance
    Bonjour,

    Je suis actuellement confronté à un problème d'automatisation de déploiement de scripts SQL.
    Contexte :
    - Le déploiement des scripts SQL est réalisé via DbUp (.NET).
    - Un même applicatif .NET est déployé à 2 reprises (multi marques) sur 2 instances de BDD différentes (par exemple une instance en France et une instance au Québec).
    - Le métier est écrit dans les procédures stockées
    - Des spécificités propres à chaque marque est écrite dans les procédures stockées : actuellement le contenu d'une procédure stockée peut être différent d'une instance/marque à l'autre
    - Certaines procédures stockées font appelles à des serveurs liés lors de certaines jointures, noms des serveurs liés étant différents d'une instance/marque à l'autre

    Actuellement, nous passons un temps "fou" pour pouvoir déployer et maintenir ces 2 instances de base de données avec leur spécificité. Nous souhaitons automatiser un maximum le déployer de ses scripts.

    Ma question :
    Comment gérer les spécificités de chaque marque dans les procédures stockées (@@servername like '%marque1%, @@servername like '%marque2%') sachant que l'on utilise des serveurs liés (le serveur lié doit exister pour que la procédure stockée compile) ?

    Merci par avance.

    Nicolas

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    Ma question :
    Comment gérer les spécificités de chaque marque dans les procédures stockées (@@servername like '%marque1%, @@servername like '%marque2%') sachant que l'on utilise des serveurs liés (le serveur lié doit exister pour que la procédure stockée compile) ?
    Pas tout compris.
    Tu voudrais faire une "super" procédure stockée qui exécute la procédure de telle ou telle instance en donnant comme paramètre le nom du serveur lié en plus des paramètres d’exécution ?
    Le savoir est une nourriture qui exige des efforts.

  3. #3
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Pour schématiser :

    2 instances de BDD : marque1 et marque2
    dans marque1, nous avons un serveur lié marque1_serv_1
    dans marque2, nous avons un serveur lié marque2_serv_2

    sachant que c'est le même applicatif web (a quelques if près dans le code) entre marque 1 et marque2, l'objectif étant de rapprocher au maximum le schéma de marque1 et marque2 ainsi que les procédures stockées

    Il existe une procédure stocker rechercher_client() qui dans marque1 fait une jointure sur les serveurs liés marque1_serv_1 mais dans marque2, cette même procédure stockée doit faire une jointure sur marque2_serv_2

    Donc soit je pourrais faire, dans rechercher_client()
    if (@@servername = marque1)
    begin
    exec rechercher_client_marque1()
    end
    elsif (@@servername = marque2)
    begin
    exec rechercher_client_marque2()
    end

    Cependant, cela m'oblige à trouver comment déployer rechercher_client_marque1() uniquement sur marque1 et idem pour recherche_client_marque2 sur marque2; sachant que bien sûr, pour des raisons de RGPD, marque1 ne peut pas enregistré le serveur lié marque2_serv_2 et inversement

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Et les synonymes ?
    Chaque instance aura ses propres synonymes pour l'ensemble des tables à utiliser.

    Un script qui en fonction de l'instance créera ce qui doit être référencé (local vs distant)

    Une bonne convention de nommage là dessus et le tour est joué
    Le savoir est une nourriture qui exige des efforts.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    sachant que bien sûr, pour des raisons de RGPD, marque1 ne peut pas enregistré le serveur lié marque2_serv_2 et inversement
    t'as lu ça où ?
    Le savoir est une nourriture qui exige des efforts.

  6. #6
    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
    bonjour

    une solution pourrait être de créer des synonymes, ayant le même nom sur tous les serveurs, mais pointant sur la table de marque1_serv_1 pour le marque 1 et sur la table de marque2_serv_2 pour le marque 2.

    ainsi, le code de votre procédure reste le même ensuite pour les deux serveurs


    [edit] grillé , j'aurai dû rafraichir la page avant de poster !

  7. #7
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    La solution des synonymes avaient été envisagées mais en cible, nous avons beaucoup de procédures stockées qui font appellent à plusieurs tables/vues sur les serveurs liés et du coup on se retrouverait avec beaucoup de synonymes; mais il faut finalement peut être que j'en passe par là.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Si on ne peut résoudre le volume des objets, une bonne stratégie de gestion de l'espace de nom devient la meilleure approche.

    La solution de créer des schémas est la seule option que je connaisse sous SQL server.

    Un seul niveau c'est court.

    Dommage que SSMS ne permette pas d'afficher par schéma, un peu comme sous Oracle.
    J'ai testé un add-in qui fait apparaitre les schémas à l'intérieur des nœuds de l'arborescence SQL mais c'est pas performant car c'est une surcouche qui attend d'avoir la liste de tous les objets dans l'interface avant de peupler les sous nœuds.
    Quand t'as des milliers d'objets c'est long. trop long.
    Le savoir est une nourriture qui exige des efforts.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déploiement BDD SQL SERVER EXPRESS avec application .net
    Par Loriscis dans le forum Visual Studio
    Réponses: 2
    Dernier message: 06/04/2010, 21h29
  2. [Déploiement]Application avec BDD
    Par atar64 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 14/04/2009, 16h23
  3. Déployer une BDD avec son appli
    Par Albertolino dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 11/03/2004, 18h08
  4. [Kylix] [cgi] pb déploiement appli avec connexion MySQL [rés
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 06/08/2002, 20h09

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