Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/05/2003, 12h18   #1
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 1
Points : 1
Par défaut [DB2]Structure de table

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.
Morphee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2003, 13h58   #2
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 39
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 39
Points : 36
Points : 36
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???
pantin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2003, 14h06   #3
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 1
Points : 1
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
Morphee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2003, 14h09   #4
Membre habitué
 
Inscription : mai 2003
Messages : 145
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 145
Points : 146
Points : 146
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
wello00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2003, 14h25   #5
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 1
Points : 1
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
Morphee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2003, 14h53   #6
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
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.
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2003, 15h02   #7
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 1
Points : 1
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.
Morphee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2003, 17h45   #8
Membre du Club
 
Arnaud GAY
Inscription : mai 2002
Messages : 59
Détails du profil
Informations personnelles :
Nom : Arnaud GAY
Âge : 38
Localisation : Luxembourg

Informations forums :
Inscription : mai 2002
Messages : 59
Points : 43
Points : 43
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...
Gandalf24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2003, 10h37   #9
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 1
Points : 1
Merci beaucoup Gandalf24 ))
Des infos super utiles !!!
Morphee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2003, 11h53   #10
Membre confirmé
 
Avatar de iubito
 
Homme
Développeur informatique
Inscription : janvier 2003
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 376
Points : 244
Points : 244
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
Tables d'une librairie :
Code :
SELECT * FROM QSYS2.SYSTABLES WHERE table_schema = 'MA_LIBRAIRIE';


merci d'avance
__________________
Compatibilité CSS | Hacks CSS IE | IE7

Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2003, 14h04   #11
Invité de passage
 
Inscription : mai 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6
Points : 1
Points : 1
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 ))
Morphee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2003, 16h23   #12
Membre confirmé
 
Avatar de iubito
 
Homme
Développeur informatique
Inscription : janvier 2003
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 376
Points : 244
Points : 244
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
__________________
Compatibilité CSS | Hacks CSS IE | IE7

Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2003, 15h53   #13
Membre confirmé
 
Avatar de iubito
 
Homme
Développeur informatique
Inscription : janvier 2003
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 376
Points : 244
Points : 244
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 :
1
2
3
4
SELECT DBIFIL, DBIFLD, DBITYP, DBIFLN, DBINUL
FROM intranet.qadbifld
WHERE DBILIB='<bibliothek>' AND DBIFIL='<table>'
ORDER BY DBIPOS
voilà, pour ceux qu'ça intéresse
__________________
Compatibilité CSS | Hacks CSS IE | IE7

Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h20.


 
 
 
 
Partenaires

Hébergement Web