Base de donnée répartie sous oracle

cynthia
Base de donnée répartie sous oracle

Bonjour,
J'ai un petit problème de compréhension sur les bases de donnée répartie et j'espère que quelqu'un pourra m'enlever tout ce brouillard. Au départ j'ai 2 bases de donnée : S1 avec ip 192.168.200.1 et S2 avec ip 192.168.200.2 :
Je sais que le listener.ora connait les bases de donnée qui sont sur sa machine et que tnsnames.ora permet d'établir la liste des serveur accessible. Moi je veux lui dire à S1 par son tnsname qu'il peut aller voir sur s2:
S1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.1)(PORT = 1520))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = chop1)
)
)
et dans le listener de s2, est ce que je dois lui dire :
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.1)(PORT = 1520))
)
)
??
J'avoue être perdue et ne plus comprendre comment le listener va pouvoir se établir la connexion. J'ai tout faux ou est ce qu'il y a des choses que je n'ai pas compris ? merci

fredericmazue
Re: Base de donnée répartie sous oracle

Je vais essayer de t'aider un petit peu, bien que tout ça soit très lointain dans mes souvenir.
Comme tu le dis très bien, le listener sait qu'il y a uyne base sur sa machine, donc normalement tu n'as pas besoin de mettre celle-ci dans le tnsnames.ora. Même si la mettre ne dois pas nuire je pense. Tu dois obligatoirement y mettre la deuxième par contre.

Je ne me souviens plus de directives DESCRIPTION_LIST.

J'ai plutôt souvenir de quelque chose comme ceci

(DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS =
           (Host = 192.168.1.2)   * adresse ip de la seconde machine 
           (Port = 1521)

Attention! Autant que je me souvienne, le port utilisé par défaut par Oracle ets 1521, pas 1520 !

En espérant t'avoir aidé un petit peu

cynthia
Re: Base de donnée répartie sous oracle

merci pour la réponse mais cela reste toujours aussi obscure.
Oui effectivement le port par défaut sur oracle est 1521 mais on peut créer un nouveau listener qui écoute sur un autre port et c'est ce que je tentais de faire.
Si sur le site S2, j'ai une base de donnée site2 qui posséde les tables A et B avec un utilisateur user1. Je voulais que quand je suis sur S1 et que je fasse connect system/mdp@site2:1520 . Alors il va voir dans son tnsname.ora pour résoudre le nom du service site2 :
DESCRIPTION=(ADRESS=(PROTOCOL=TCP)(HOST=192.168.200.2)(PORT=1520)) (CONNECT_DATA = (SERVICE_NAME=site2))
qu'il parle sur ce port S2 à l'adresse donné par le tnsname et que par l'intermédiaire d'un listener, il y est établissement d'une connection. Mais je n'arrive plus à savoir ce que je dois mettre dans mon listener.ora pour que cela fonctionne.
J'ai vérifier que le ping sur la machine distante passé mais je n'ai jamais réussi à faire passer le tnsping par exemple donc j'ai un soucis soit dans listener.ora soit dans tnsname.

abel_a
Re: Base de donnée répartie sous oracle

Bonjour,

Je ne suis pas sur de bien comprendre votre problématique, mais veuillez trouver quelques éléments de réponse:

Fonctionnement d’un Listener :
A chaque fois qu’un client distant (sqlplus, emagent, … ) effectue une connexion à une instance Oracle, un listener reçoit la demande initiale. Lorsque le lien entre le client et le listener a été effectué, ce dernier va sélectionner le bon « service handler». Le listener oracle écoute sur un port défini par l’administrateur (par défaut il s’agira du port 1521). Il est tout à fait possible de modifer ce numéro de port.

Dans la plupart des cas, on va donc démarrer un listener par machine (sauf configuration particulière). Dans votre cas, un listener pour le serveur S1 (gérant toutes les instances de S1), un second listener pour le serveur S2. Le premier va permettre d’établir les connexions des clients distants sur l’instance « baseS1 » démarrée sur le serveur S1. De la même manière, le second listener assurera les connexions sur l’instance « baseS2 » sur le serveur S2.

Echange et réplication de données :
Le listener ne permet donc pas d’échange de données entre deux bases de données. Cependant, les techniques d’échanges du type "database link" vont s’appuyer sur la configuration SQLNET (listener.ora, sqlnet.ora, tnsnames.ora,…). Pour rappel, un DB Link permettra d'atteindre des données se trouvant sur la baseS2 en étant connecté sur la base baseS1 ou inversement. Dans le cas d’un échange S1-> S2 via Db link par exemple. Il est primordial d’être capable de faire un « tnsping baseS2 » depuis la machine S1 et réciproquement.

En synthèse:
Si l'objectif consiste à se connecter à la base "BaseS2" depuis le serveur S1. Il est nécessaire d'indiquer via le fichier tnsnames.ora où se trouve la base "baseS2" sur le serveur S1.

Si l'objectif est d'executer des requêtes SQL sur des tables hébergées sur BaseS1 et BaseS2 en étant connecté sur la baseS1 par exemple, il faudra créer un DB Link ("create database link ....") sur la BaseS1. Il sera alors possible d'accèder aux tables de BaseS1 mais aussi aux tables de BaseS2.

Dans tous les cas, le plus simple consiste à declarer dans tous les fichiers tnsnames.ora (des serveurs S1, S2 et des éventuels clients impactés), toutes les bases. Il faudra ensuite vérifier les différentes combinaisons de connexions.

Cdt,
Abel