|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mai 2003 Messages : 6 ![]() |
Hello World !
Je suis en stage de fin d'études et on me demande de faire un programme qui permet entre autres de copier des tables d'une base de données à une autre. Pour le moment, ces bases sont hébergées sous DB2 mais à terme il faudra qu'on puisse copier d'un SGBD quelconque à un autre. Je voudrais donc récupérer la structure des tables sur un serveur, contruire une nouvelle table sur un autre serveur et copier les données ensuite. J'ai pensé utiliser les vues systèmes qui me permettent de connaître les définitions des colonnes mais c'est un beau b.... pour retrouver toutes les contraintes d'intégrité, d'unicité, de génération, etc. Y aurait-il un moyen de copier une table d'une base vers une autre, sur un serveur différent un peu à la manière de la requête CREATE SUMMARY TABLE tablename1 LIKE tablename2... Bon j'en demande beaucoup mais construire une requête CREATE TABLE dynamiquement, c'est quand même pas de la tarte ... A l'aide svp, mon diplôme est (presque) en jeu !!! Merci. |
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Inscription : février 2003 Messages : 39 ![]() |
Perso, je pense que tu vas etre obliger d'ecrire un script PL/SQL (ou autre) qui te générera à partir de ta base un script permettant de la recreer....
En quoi comptes tu developper? PL/SQL, perl??? |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mai 2003 Messages : 6 ![]() |
Le hic, c'est que je dois développer avec un L4G (Visual Adelia) avec lequel je peux passer des ordres SQL génériques (mais ils sont limités) ou exécuter des commandes SQL de mon choix mais spécifiques à un SGBD en particulier. Et une spécif de mon appli est la portabilité aussi bien au niveau plateforme que SGBD ....
Je pense qu'effectivement je ne vais pas avoir le choix : il va falloir que je construise un script permettant de générer les tables à partir des infos des vues système du SGBD source ... => 1 script pour chaque SGBD va falloir que je réévalue les charges |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : mai 2003 Messages : 145 ![]() |
faut savoir que chaque SGBDR construit des tables systèmes dans chaque base de données, ces tables sont cachées par défaut mais je crois que tu trouvera ston bonheur là dedans, c'est clair ensuite faudre se taper des script pour contruire un CREATE TABLE NORMALISE ANSI. Donc renseigne toi sur DB2, tu doi avoir un programmer guide quelque part.
Bon courage |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mai 2003 Messages : 6 ![]() |
Oui il y a de la doc : rien que pour le CREATE TABLE : 44 pages de doc avec des schémas de syntaxe illisibles !!
Merci |
|
|
00
|
|
|
#6 |
![]() Inscription : décembre 2002 Messages : 2 397 ![]() |
Bonjour
Voilà mon petit avis sur la question : 1) Faites une étude théorique générale du sujet qui va vous permettre d'identifier les problématiques majeures et de circonscrire votre projet. Par exemple, vous pourrez préciser d'emblée qu'une méthode généraliste procédant par sélection des données d'un côté et insertion de l'autre aura des performances faibles, ce qui limite une telle application à de petites tables. (sinon, il vaut mieux recourir aux outils natifs d'extraction et de chargement en masse des SGBD source et cible). Vous déciderez peut-être de ne pas prendre en compte les données stockées sous forme d'objets (Oracle par exemple). Vous ferez un état des lieux de la diversité des types de données entre les différents SGBD et vous les mettrez en correspondance avec les types de la norme SQL (2 ou 3). De même vous soulignerez la diversité des modes de spécification des contraintes référentielles, des contraintes sur les valeurs, etc, entre les différents SGBD, et vous indiquerez que dans certains cas (par exemple passage de SQL Server à MySql), on aura une perte des contraintes référentielles. 2) Sélectionnez les SGBD que vous voulez traiter, et bon courage ! 3) La consultation des tables système est impérative pour accéder à la structure des données, aux contraintes, etc. C'est peut-être le bordel, comme vous dites, mais c'est comme ça que ça marche. 4) ODBC fournit des primitives d'accès au dictionnaire de données des différents SGBD. Ceci signifie qu'avec la même fonction, vous pourrez connaître la liste des tables dans le SGBD voulu. J'ignore en revanche si ces primitives sont suffisamment raffinées pour répondre à tous vos besoins (à vrai dire je crains que non). Je suppose aussi, mais je ne l'affirme pas, que d'autres middlewares genre JDBC, OLEDB au outres fournissent des services identiques. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2003 Messages : 6 ![]() |
Merci pour vos lumières. Même si je craignais vivement de recevoir une réponse de ce type, il semble en effet que je n'ai pas d'autre choix.
|
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Arnaud GAYInscription : mai 2002 Messages : 59 ![]() |
Ugh,
va voir sur ce site, tu y trouvera surement qq infos interessantes : http://client-serveur.ifrance.com
__________________
Le nom d'un bomerang qui ne revient pas quand on le lance ? Un Baton... |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : mai 2003 Messages : 6 ![]() |
Merci beaucoup Gandalf24
Des infos super utiles !!! |
|
|
00
|
|
|
#10 |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2003 Messages : 376 ![]() |
je remonte un vieux topic (pfiou ça sent la poussière
)es-tu arrivé à lire les structures des tables sur DB2 ? Je dois faire des requêtes (dans du java/jsp) qui récupèrent la structure de quelques tables sur DB2, qui les balances dans mysql (ça je maîtrise à peu près). Le site indiqué un peu plus haut est très intéressant pour comparer, mais je n'y ai pas trouvé comment connaître la structure des tables. Actuellement j'arrive à connaître la liste des librairies, et la liste des tables dans une librairie. Librairies : Code :
SELECT TABLE_SCHEMA, COUNT(*) AS "COUNT" FROM QSYS2.SYSTABLES GROUP BY TABLE_SCHEMA ORDER BY "COUNT" DESC Code :
SELECT * FROM QSYS2.SYSTABLES WHERE table_schema = 'MA_LIBRAIRIE'; ![]() merci d'avance |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : mai 2003 Messages : 6 ![]() |
Oui, j'ai fini par y arriver. Mais waou!! Ca fait un bail !!
Par contre mon prototype ne gère pour le moment que les tables sous DB2 Windows, j'ai dû restreindre le sujet. Mais les différences de schémas (les bibs sous AS/400) ne doivent pas être énormes avec DB2 400. Il te faut écrire un script qui construit une requête SQL qui recrée tes tables dans MySQL à partir des données obtenues sous DB2. Pour cela tu as besoin bien sûr du nom de tes tables, des champs, de leur type, des contraintes associées et tu récupérer tout ça dans les tables de la bib QSYS2. Mais comme le disait si justement Pomalaix, le passage de DB2 à MySQL peut être dangereux pour la cohérence des données entre les deux bases (ref gestion des contraintes d'intégrité référentielle ....). Tes traitements se feront sur tes 2 bases où alors l'une des deux est la réplication de l'autre ??? Voilà, c'est un peu loin tout ça ... Si t'as de questions, n'hésite pas, je ferais de mon mieux |
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2003 Messages : 376 ![]() |
g trouvé la table où je dois piocher.
en fait sur mysql c quasiment que de la consultation, juste une table mise à jour et renvoyé sur DB2 à la synchro |
|
|
00
|
|
|
#13 | ||
|
Membre confirmé
![]() Développeur informatique Inscription : janvier 2003 Messages : 376 ![]() |
c'est la table QSYS/QADBIFLD mais pour des raisons de sécurité y'a pas trop de droits dessus, j'ai créé une vue dans ma bibliothèque INTRANET, et donc ma requête est :
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com