Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 05/08/2011, 16h54   #1
Invité de passage
 
Inscription : octobre 2004
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 1
Points : 0
Points : 0
Envoyer un message via MSN à Yves40
Par défaut Table AS400 sur oracle

Bonjour

j'utilise toad pour gerer ma base de donnée sous oracle. J'aimerai pouvoir me connecter sur une table AS400 pour avoir la possibilités d'avoir toutes les données attaquables par cet outils. J'ai paramétré une source de donnée odbc avec les donnees de l'as400 que j'ai appelé ficlgtr mais je n'arrive pas à faire le lien sur oracle et donc à la voir sur toad.

Desolé de paraitre si nul mais merci de votre aide
Yves40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 17h28   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
http://forums.oracle.com/forums/thre...hreadID=373464

Bon courage
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 17h28   #3
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Utilisez-vous la Gateway Oracle pour AS400 ou tentez-vous une connexion directement de Toad à l'AS400 via ODBC ?

Il ne me semble pas que cela fonctionne si aisément via Toad... ce n'est pas Access
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql
Administrateur SAP
Mes articles

Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 19h19   #4
Expert Oracle confirmé

 
Homme Gilles ROUARD
Administrateur de base de données
Inscription : mars 2003
Messages : 220
Détails du profil
Informations personnelles :
Nom : Homme Gilles ROUARD
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 220
Points : 322
Points : 322
Bonjour,

J'ai justement une base de données 10gR2 sous Windows qui se connecte via DB Link à une base distante DB2, via l'ODBC.

Je viens de migrer cette base de données :
- en 11gR2 (11.2.0.2.0)
- avec l'option RAC One Node et ASM
- sur de nouveaux serveurs IBM tournant sous Red Hat Enterprise Linux v5.6

Tout d'abord, pour votre information, jusqu'en 10g, la connexion par ODBC s'appelait HS (Heterogeneous Services), et depuis la 11g, a été renommée en Database Gateway for ODBC.

Cela ne change pas grand chose, sauf que le Listener appellera un exécutable qui s'appelle HSODBC jusqu'en 10g, et DG4ODBC (Database Gateway For ODBC) en 11g.


Citation:
J'ai paramétré une source de donnée odbc avec les donnees de l'as400
Je pars du même postulat que vous, à savoir que sur mon serveur Linux, j'ai créé un Datasource (que j'appelle DB2) qui pointe sur mon AS400 en utilisant le bon driver (dans mon cas "iSeries ODBC Driver For Linux").

J'ai d'ailleurs testé ce Datasource via l'utilitaire isql.

Votre but est donc de vous connecter depuis Toad sur votre base Oracle, et de là requêter sur DB2 via un DB Link que j'appelerai DB2, avec une requête du style :

Code :
SELECT * FROM <ma_table>@DB2 ;

Pour se faire, il y a 4 étapes à suivre :
1) créer un Database Link sur votre base Oracle
2) ajouter une entrée dans votre TNSNAMES.ORA
3) ajouter un service gérant l'appel au composant HS au niveau du LISTENER.ORA
4) créer un fichier de configuration qui permettra à l'exécutable HS de trouver votre Datasource et de se connecter à votre base DB2.

1) Sur votre base Oracle, il faut créer le DB Link (public ou non) DB2, utilisant la chaîne de connexion DB2 :

Code :
CREATE DATABASE LINK DB2 CONNECT TO <ID> IDENTIFIED BY <password> USING 'DB2' ;

2) Il faut maintenant définir cette chaîne de connexion DB2 dans le fichier TNSNAMES.ORA de votre serveur Oracle :

Code :
1
2
3
4
5
6
7
8
9
10
DB2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = <serveur_Oracle>)(PORT = <port_du_listener>))
    )
    (CONNECT_DATA =
      (SID = DB2)
    )
    (HS = OK)
  )
A vous de renseigner le HOST avec le nom ou l'adresse IP de votre serveur Oracle, et le PORT avec le port d'écoute du Listener (souvent 1521 ou 1560).

Noter ici HS=OK qui indique que notre base va se connecter via Heterogeneous Services. J'ai aussi indiqué DB2 comme SID, c'est-à-dire comme service que l'on va demander au Listener.

Il faut donc maintenant configurer le Listener pour qu'il gère un service DB2.


3) Modifier maintenant votre fichier LISTENER.ORA (toujours sur votre serveur Oracle), en rajoutant la section suivante (je suppose que votre Listener s'appelle LISTENER) :

Code :
1
2
3
4
5
6
7
8
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (PROGRAM = dg4odbc ou hsodbc)
      (SID_NAME = DB2)
      (ORACLE_HOME = <votre_ORACLE_HOME>)
    )
  )
Comme je vous l'avais dit, si vous êtes en 11g, PROGRAM doit valoir dg4odbc.
Sinon il doit valoir hsodbc.

Vous trouverez ce programme sous le répertoire BIN de votre $Oracle_Home.
A noter que sous Windows, même si les programmes portent une extension .exe à la fin, il ne faut pas spécifier ce .exe dans le LISTENER.ORA

Et pour finir, j'ai spécifié DB2 comme SID_NAME. Cela veut dire qu'il va falloir créer un fichier qui s'appelera forcément initDB2.ora et qu'il faudra stocker sous $Oracle_Home/hs/admin

Ce fichier est en fait le fichier de configuration de l'exécutable HS qui permet d'appeler le Datasource.


4) Création du fichier initDB2.ora sous $ORACLE_HOME/hs/admin :

Voici un exemple sous Windows avec une base 10gR2.

Code :
1
2
3
4
5
6
7
8
# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent. 
 
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = DB2
HS_FDS_TRACE_LEVEL = OFF
C'est simple, et la variable HS_FDS_CONNECT_INFO indique le nom de la source de données (ici DB2).


Voici le même fichier de configuration sous Linux avec ma base 11gR2 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
 
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = DB2
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
 
#
# ODBC specific environment variables
#
SET ODBCINI=/etc/odbc.ini
 
 
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
Il y a 2 choses en plus :
1) HS_FDS_SHAREABLE_NAME qui spécifie le chemin et le nom de la librairie pour ODBC. Attention, en 11gR2, l'exécutable DG4ODBC est en 64 bits, et réclame donc un Driver Manager 64 bits (d'ou le chemin lib64) ainsi que le driver iSeries installé en 64 bits.

2) la variable ODBCINI qui spécifie le chemin et le nom du fichier des Datasources.

Moi j'ai choisi de faire un Datasource système, c'est-à-dire visible par tous les users Unix. Du coup, il est forcément sous /etc et s'appelle ODBC.INI sous Linux.


Voilà, bon courage. Moi j'ai mis la semaine pour comprendre le fonctionnement de Database Gateway, installer le bon driver iSeries, configurer tous les fichiers et faire marcher le bousin.



Maintenant, j'ai à mon tour une question : ma configuration marche très bien sur 2 serveurs, où j'ai mis le nom du serveur dans chaque TNSNAMES.ORA.

Mais en fait, ces 2 serveurs sont en cluster avec OGI (Oracle Grid Infrastructure), et ma base est en RAC One Node.

Comme je le disais, mon DB Link fonctionne bien, même si je m'amuse à déplacer mon instance d'un noeud à un autre au sein de mon cluster, avec la commande RELOCATE.

Maintenant, je souhaite indiquer dans les fichiers TNSNAMES.ORA non plus le nom de chaque noeud, mais le nom de mon cluster, pour faire plus propre, et pour passer par le serveur DNS.

Et là, mon DB Link ne marche plus. J'ai l'erreur Oracle suivante :

Citation:
ORA-28545: erreur détectée par Net8 lors de la connexion à un agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: précédant 2 lines de MAUD.AXACSA
Et l'Alert.log m'iindique :

Citation:
HS: Unable to establish RPC connection to HS Agent...
HS: ... Agent SID = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=racd-scan)(PORT=1560)))(CONNECT_DATA=(SID=DB2))), NCR error = 65535 Unable to retrieve text of NETWORK/NCR message 65535
HS: Unable to establish RPC connection to HS Agent...

Selon vous, cette configuration peut-elle fonctionner ?

J'ai du mal à comprendre pourquoi cela ne fonctionne pas. Dans le 1er cas, en spécifiant le nom du noeud, je sais que je contacte directement le SCAN Listener de mon noeud.

Maintenant, en indiquant le nom de mon cluster, je vais passer par notre DNS qui va effectuer la résolution de nom, et fournir une des 3 adresses IP de nos SCAN Listener avec un algorithme de type Round-Robin.

Et après, que se passe t-il ?
rouardg est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h41.


 
 
 
 
Partenaires

Hébergement Web