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

Oracle Discussion :

[JDBC] Connexion sur deux bases de données en même temps


Sujet :

Oracle

  1. #1
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut [JDBC] Connexion sur deux bases de données en même temps
    Je débute avec Oracle et je suis en train d'essayer d'implémenter une comparaison de bases de données en Java.

    J'ai trouvé quelque part les requêtes à exécuter dans Toad pour faire ressortir les lignes qui n'existent pas dans une table de la base 1 mais qui existent dans la table du même nom de la base 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * FROM PRODUCTS@BASE2 SOURCE 
    WHERE NOT EXISTS (
    	  	  		  SELECT * FROM PRODUCTS@BASE1 TARGET
    				  WHERE SOURCE.PRD_UNIKEY=TARGET.PRD_UNIKEY)
    C'est la première fois que je vois cette syntaxe avec "@" et si j'ai bien compris, ça permet de de placer "entre deux bases de données". D'ailleurs, je n'ai pas encore compris comment je dois m'identifier pour exécuter cette requête et avoir accès simultanément aux deux bases.

    Ma question est de savoir si je peux exécuter ce genre de requête avec JDBC, étant donné que normalement une java.sql.Connection est spécifique à une base, ou alors si je dois forcément sélectionner toutes les lignes de la base 1, puis toute les lignes de la base 2, puis effectuer la comparaison dans mon code (ce qui est quand même beaucoup moins propre).

    Je sais pas si je suis très clair mais bon...
    Sébastien ARBOGAST
    SCJP

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Le plus simple est de prendre une DB en master. Et après de faire un DB-link (D'ou le @) du master vers le slave.
    Je ne connais pas par coeur la syntaxe du DB-Link c'est un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    CREATE [PUBLIC] DATABASE LINK dblink 
        CONNECT TO mon_user IDENTIFIED BY mon_password
        USING 'connect_string' <--- SID du TNS
    A verifier.
    APrès cela tu pourra du master faire un SELECT * FROM myTyble@SLAVE
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    OK donc a priori c'est faisable avec JDBC ? Il suffit que j'exécute cette requête de création de DB link, c'est ça ?
    Sébastien ARBOGAST
    SCJP

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Oui si ta requete de comparaison marche avec sqlplus, ca marchera avec JDBC.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  5. #5
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    OK maintenant j'ai un autre problème. Cette requête marche sans problème quand les deux bases sont sur le même host, mais est-ce que c'est possible d'établir un DB-link avec un host différent que celui du master ?
    Sébastien ARBOGAST
    SCJP

  6. #6
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Oui puisque tu as défini le DB-LInk grace au TNS-Name.
    Rien ne t'empeche dans ton tnsname.ora de définir un host différent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BASE2 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = BASE2_SID)
        )
      )
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  7. #7
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Oulah ! mais le TNSNames j'y ai pas accès dans mon code Java. si ?
    Sébastien ARBOGAST
    SCJP

  8. #8
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    JDBC m'en a pas besoin.
    JDBC lui execute une query sur la DB. Donc c'est la DB qui doit résoudre @BASE2. Et la db elle y a access. Enfin indirectement via le Listener mais ce n'est pas important.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  9. #9
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    OK alors ça change un peu les paramètres d'entrée de mon programme. Jusqu'à maintenant je lui passait simplement le host, le port, le SID, le username et le password. Mais là en fait je peux remplacer les 3 premiers par le TNSName. Ce qui me gène un peu dans cette approche, c'est le fait que le TNSName est dépendant de la configuration du client Oracle : si j'installe mon application sur un serveur où les TNSNames sont différents, tout foire.
    Sébastien ARBOGAST
    SCJP

  10. #10
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Non toi tu ne vois pas de difference.
    Ton programme fonctionne de facon identique.
    La différence se trouve sur la DB.
    Je parle du tnsname de la DB.
    Il n'y a que la DB à changer.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  11. #11
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Ah OK tu veux dire que le DB-link doit être créé dans la base de données master avant même que le programme ne soit lancé ?
    Sébastien ARBOGAST
    SCJP

  12. #12
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    oui c'est ca
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  13. #13
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    OK mais alors du coup j'ai besoin de connaître l'identifiant de mes DBLink dans mon programme pour pouvoir exécuter la requête croisée ? Même mieux : je n'ai besoin que de ça, puisque les host, port, SID, username et password sont déjà dans le DB-Link. Ou alors j'ai rien compris ?
    Sébastien ARBOGAST
    SCJP

  14. #14
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Oui pour la db slave, mais il te faut quand même encore te connecter à la master
    Steve Hostettler
    est ton ami(e) et le tag aussi.

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

Discussions similaires

  1. [AC-2007] ouvrir deux bases de données en même temps [Résolu]
    Par safa-ini dans le forum Access
    Réponses: 6
    Dernier message: 03/03/2014, 11h35
  2. [Conception] connexion de deux bases de données dans une page en php
    Par leclone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/04/2007, 14h59
  3. [JDBC] Connexion a une base de données Access
    Par sg-40 dans le forum JDBC
    Réponses: 4
    Dernier message: 05/11/2005, 15h25
  4. Connexion sur une base de données Postgre
    Par ktox dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/08/2005, 10h58
  5. [MySQL] Se connecter à deux base de données en même temps ??
    Par leo13 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/01/2005, 10h36

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