Publicité
+ Répondre à la discussion
Page 1 sur 5 12345 DernièreDernière
Affichage des résultats 1 à 20 sur 98

Discussion: Fusion de BDD

  1. #1

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut Fusion de BDD

    Bonjour,
    On a deux serveurs SQL avec deux BDD de structure identique (régulièrement on fait des BACK UP et DELETE car on se retrouve avec énormément de ligne ...). On me demande d'avoir une 3ème BDD sur un 3ème serveur SQL qui regroupe les données des deux BDD (il n'y a pas de clés dans la BDD ).
    J'ai penser à décomposer la tâche de la manière suivante :
    - Réaliser un BACK UP avant toute opération (j'ai un script en BAT pour ça ...) ;
    - Importer les deux BDD vers le 3ème serveur (uniquement les nouvelles données et sans écraser les anciennes)
    Je programmerai après l'execution du script (si c'est pas possible avec un logiciel, même payant!)
    Je ne vois pas comment m'y prendre ?
    Merci;

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    On a deux serveurs SQL avec deux BDD de structure identique

    (il n'y a pas de clés dans la BDD ).
    Il y a décidément des choses à revoir dans votre informatique !

    J'ai penser à décomposer la tâche de la manière suivante :
    - Réaliser un BACK UP avant toute opération (j'ai un script en BAT pour ça ...) ;
    - Importer les deux BDD vers le 3ème serveur (uniquement les nouvelles données et sans écraser les anciennes)
    Oui et ensuite fusion dans la nouvelle BDD :
    - directement si vous vous contentez de travaillez toujours aussi mal ;
    - de manière plus méthodique si vous voulez vous améliorer en faisant d'abord un modèle de données normalisé. On peut vous aider dans le forum Schéma pour ça.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Au fait, la BDD existe déjà depuis très longtemps je ne touche pas à la structure mais j'étais étonne lorsque j'ai vu qu'ils n'y avaient pas de clés. On voudraient faire une MAJ régulièrement sur la 3ème BDD (uniquement les nouvelles données des BDD 1 et BDD2). Vous conseillez un script ou bien une appli existe déjà ?

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    Et bien cette fusion me semble le moment idéal pour réorganiser tout ça, quitte bien sûr à utiliser des vues pour que les logiciels qui utilisent les BDD ne soient pas perdus et n'aient pas à être modifiés.

    Par contre, avec MySQL, ce sera plus compliqué côté insertion et modification de données.
    La question mérite quand même d'être étudiée, surtout si vous avez de grosses quantités de données. Actuellement, ça ne doit pas être très performant tout ça !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Non mais on a une nouvelle BDD avec des clés ... (je suis que stagiaire) donc tu me dis que le script PHP/SQL n'est pas une bonne idée? J'ai entendu parler d'une appli (TALEND) ...

  6. #6
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    Non mais on a une nouvelle BDD avec des clés
    C'est la nouvelle BDD que tu dois alimenter par fusion des deux anciennes ?

    le script PHP/SQL n'est pas une bonne idée?
    De quel script parles-tu ?

    S'il s'agit effectivement d'importer dans une BDD normalisée des données venant de BDD mal foutues, oui, il va falloir faire des requêtes SQL méthodiquement pour répartir correctement les données dans les tables de la nouvelle BDD. Ça peut se faire directement par un script SQL mais il sera peut-être parfois nécessaire d'utiliser un programme externe, par exemple en PHP.

    J'ai eu à re-concevoir une BDD il y a quelques années et j'ai dû utiliser des petits programmes PHP pour éclater des colonnes multi-valuées afin de répartir ces valeurs à l'endroit où elles devaient être dans la nouvelle BDD mais j'ai fait l'essentiel de la migration en SQL direct.

    Il faut être très méthodique et tester chaque étape, les contrôler avec des requêtes pour vérifier que les nouvelles données correspondent bien aux anciennes, identifier les lignes manquantes et la cause de l'échec de leur importation (souvent des données mortes, inexploitables).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Non je travaille sur les anciennes. Les trois BDD ont la même structure.
    Je pensais a taper un script qui entre uniquement les nouvelles données provenant des back up des BDD 1 et BDD 2 (une fois par moi par exemple, le script back up est un bat).

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    avril 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : avril 2011
    Messages : 618
    Points : 260
    Points
    260

    Par défaut

    Avec un ETL du type Talend Open Studio ou en payant (mais gratuit 30jours) FME.

  9. #9
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    Citation Envoyé par SNY77 Voir le message
    Non je travaille sur les anciennes. Les trois BDD ont la même structure.
    Je pensais a taper un script qui entre uniquement les nouvelles données provenant des back up des BDD 1 et BDD 2 (une fois par moi par exemple, le script back up est un bat).
    Autrement dit, vous ajoutez du bordel au bordel !

    Heureusement que tu n'es que stagiaire ! Ne postule pas à un emploi dans cette boîte !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    c'est une très grande boite ... Alors quelle est la solution la plus simple pour vous ?

  11. #11
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    En méthode sale, un banal script SQL rempli de requêtes de ce style :
    Code SQL :
    1
    2
    3
    INSERT INTO table_n
    SELECT *
    FROM bdd_x.table_n

    Pas besoin de PHP.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Le soucis c'est la gestion des données déjà existante sur la 3ème BDD ? Il est peut être possible de sélectionner les données des BDD1 et 2 non existante sur la 3ème.

  13. #13
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    Ben il suffit d'ajouter les conditions nécessaires pour empêcher l'écrasement des données :
    Code SQL :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO bdd3.table_n n
    SELECT *
    FROM bdd_x.table_n nx
    WHERE NOT EXISTS
    (
    	SELECT 1
    	FROM bdd3.table_n n3
    	WHERE n3.colA = nx.colA
    		AND n3.colB = nx.colB
    		-- etc.
    )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  14. #14

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Ok merci, donc en gros dans mon script :
    1/ Connexion au 3 BDD (je créerai un utilisateur sur chaque serveur SQL ...)
    2/ Je rentre ta requête INSERT INTO pour la BDD 1 et ensuite la BDD 2 en vérifiant champs par champs si les données existent déjà ou nn .
    C'est bien ça ? Le mieux serait de taper ça sous forme SQL ou en BATCH ?

  15. #15
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    1) Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

    2) Pas besoin de se connecter aux trois BDD.
    Tu te connectes au SGBD puis tu fais des requêtes multi-BDD comme je viens de le faire selon le principe suivant :
    Code SQL :
    1
    2
    3
    4
    INSERT INTO bdd3.table1 t31
    SELECT *
    FROM bdd1.table1 t11
    -- etc.

    3) Pas un contrôle de chaque colonne individuellement mais du groupe de colonnes permettant d'identifier de manière unique chaque ligne de la table. On appelle ça une clé candidate et il peut y en avoir plusieurs dans une table.

    Par exemple, soit la table suivante où le mauvais créateur a omis de créer une clé primaire :
    personne (nom, prenom, date_naissance, date_creation, adresse, telephone)

    Il peut y avoir plusieurs Jean Dupont donc le couple {nom, prenom} n'est pas suffisant comme clé.
    Il peut y avoir plusieurs Jean Dupont nés le 15/05/1950 mais c'est beaucoup moins probable. Une requête sur la table permet de vérifier si le triplet {nom, prenom, date_naissance} peut être une clé candidate :
    Code SQL :
    1
    2
    3
    4
    SELECT nom, prenom, date_naissance
    FROM personne
    GROUP BY nom, prenom, date_naissance
    HAVING COUNT(*) > 1
    Si la requête retourne des lignes, le triplet n'est pas clé candidate.

    On peut ensuite faire pareil avec d'autres ensembles de colonnes afin de trouver l'ensemble qui peut constituer la clé et c'est cette clé qu'il faut utiliser dans la condition de restriction pour éviter l'écrasement des données existantes dans la BDD 3.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  16. #16

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Concernant les clés, je pense qu'il serait plus judicieux de s'assurer qu'on a pas de lignes identiques (donc avec tous les champs ...). Ca simplifie du coup le script parce que le je suis un peu perdu

  17. #17
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 544
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 544
    Points : 8 033
    Points
    8 033

    Par défaut

    Salut,

    [HS]
    Ils ont l'air de bichonner leur stagiaire dis donc
    [/HS]

    J'espère qu'ils supervisent au moins...
    # Dans la Création, tout est permis mais tout n'est pas utile...

  18. #18
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    Oui, il suffit de compléter mon WHERE avec toutes les colonnes de la table :
    Citation Envoyé par CinéPhil
    Code SQL :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT INTO bdd3.table_n n
    SELECT *
    FROM bdd_x.table_n nx
    WHERE NOT EXISTS
    (
    	SELECT 1
    	FROM bdd3.table_n n3
    	WHERE n3.colA = nx.colA
    		AND n3.colB = nx.colB
    		-- etc.
    )
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  19. #19

    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 265
    Points : -8
    Points
    -8

    Par défaut

    Ok, merci je vais tester ça et je vous tiendrai au courant ! Je fais ça dans un fichier SQL c'est mieux ? Et après je l'exécute; Parcontre je devrais quand même me connecter aux 3 SGBD ? Apparemment j'ai des clés primaires dans certaines tables : (je pensais pas car pas colonnes ID ...)
    Code :
    PRIMARY KEY (`num_serie`,`date`) USING BTREE
    Je teste donc que les champs que je retrouve dans les clés primaires (dans le cas précédent les deux champs num_serie et date) ?
    Merci;

  20. #20
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 771
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 771
    Points : 22 987
    Points
    22 987

    Par défaut

    Ben voilà ! Avec des clés primaires, c'est quand même déjà mieux !

    Tu devras te connecter aux BDD 1 et 2 pour récupérer les données par DUMP mais j'ai cru comprendre que tu avais déjà un script pour exporter ces deux BDD dans le nouveau serveur.

    Une fois cet export fait, tu te connectes au serveur 3 puis tu exécute les requêtes une à une en phase de test et en vérifiant que tu ne perds ni n'écrase de données en route (mais avec les clés primaires, normalement, il ne devrait pas y avoir de problème).

    Ensuite, quand tout est prêt, tu vide la nouvelle BDD puis tu mets tes requêtes dans un fichier .sql que tu exécutes pour voir si la procédure passe d'un seul coup avec ce ficher.

    Code :
    mysql -u nom_user_mysql -pson_mot_de_passe bdd3 < chemin/vers/fichier.sql
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •