begin process at 2008 08 08 20:54:50
1 223 583 membres
341 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Lecture d'une base via DSN et ODBC sur Linux [ Oracle / Divers ] (Lucinda000)

Lecture d'une base via DSN et ODBC sur Linux le 07/05/2007 14:33:00

Lucinda000
Bonjour à tous,

Je souhaite accéder à une base access sur un PC Linux en Red Hat 3. Sur ce PC, il y a donc mon fichier *.mdb et Oracle version 9.2.0

Après plusieurs petites recherches, j'ai trouvé le bon driver pour lire mon fichier *.mdb (j'ai choisi libmdbodbc.so).

J'ai ensuite fouillé sur internet pour trouver un peu d'aide.

J'ai bien créé mon DSN, dont voici les détails :

Pour mon fichier odbcinst.ini :
[MicrosoftAccess]
Description    = ODBC for Microsoft Access
Driver        = /usr/lib/libmdbodbc.so
Setup        = /usr/lib/libmdbodbc.so
FileUsage    = 1


et pour mon fichier odbc.ini :
[DSN]
Description        = MicrosoftAccess Base
Driver        = MicrosoftAccess
Database = /home/users/data/mestests/base.mdb
Servername = localhost



Donc bon, j'essaie de voir si mon DSN est bien configuré, OpenOffice.org le voit, j'me dis : "Chouette, ça doit être bon !"

Ben non, c'est pas fini. Parce que je dois aller lire ma base par programmation...

Donc je me dis, essayons les "heterogeneous services" d'Oracle, ça doit être bien tout ça.

Donc je configure mes p'tits fichiers qui vont bien.
Mon fichier "inithsdsn.ora" localisé dans $ORACLE_HOME/admin
HS_FDS_CONNECT_INFO = DSN
HS_FDS_TRACE_LEVEL = 0
HS_DB_NAME = hsdsn
HS_FDS_SHAREABLE_NAME = /usr/lib/libmdbodbc.so


Mon fichier "listener.ora" placé dans $ORACLE_HOME/network/admin
SID_LIST_LISTENER=
   (SID_LIST=
       (SID_DESC=
      (PROGRAM=hsodbc)
      (SID_NAME=DSN)              
      (ORACLE_HOME=/home/oracle/product/9.2.0)
    )
   )



et mon fichier "tnsnames.ora" placé aussi dans $ORACLE_HOME/network/admin
hsdsn  =
  (DESCRIPTION=
    (ADDRESS=
        (PROTOCOL=tcp)
    (HOST=localhost)
    (PORT=1521)
    )
    (CONNECT_DATA=
        (SERVICE_NAME=DSN)
    )
    (HS=OK)
  )


Une fois tout ça effectué, je suis contente normalement. J'me dis, ça devrait marcher...

Bon je mets les droits sur le fichier "listener.log" sinon ça marche pas.

Et là, je vois aucun service quand je lance la commande "lsnrctl start".

Voilà ce que j'obtiens (oh joie!) :
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 07-MAY-2007 13:54:43
 
Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.
 
Starting /home/oracle/product/9.2.0/bin/tnslsnr: please wait...
 
TNSLSNR for Linux: Version 9.2.0.4.0 - Production
System parameter file is /home/oracle/product/9.2.0/network/admin/listener.ora
Log messages written to /home/oracle/product/9.2.0/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 9.2.0.4.0 - Production
Start Date                07-MAY-2007 13:54:43
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  OFF
SNMP                      OFF
Listener Parameter File   /home/oracle/product/9.2.0/network/admin/listener.ora
Listener Log File         /home/oracle/product/9.2.0/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
The listener supports no services
The command completed successfully



Bon alors qu'est-ce que j'ai mal fait ? Comment je peux créer le lien entre ma base de données access base.mdb et ce truc ? Comment je peux faire des requêtes là-dedans ?

Please, help me !

Re : Lecture d'une base via DSN et ODBC sur Linux le 09/05/2007 11:14:05

Lucinda000
Bon, j'ai avancé. J'arrive à me connecter à mon DSN via un programme en C, mais pas à effectuer une requête.

Est-ce que quelqu'un aurait une idée ?

Re : Lecture d'une base via DSN et ODBC sur Linux le 22/05/2007 15:51:54

Lucinda000
Réponse acceptée !
J'ai fini par réussir, sans ODBC ni DSN, je donne donc ma solution (pour ceux que ça intéresse).

Je rappelle le contexte :
J'ai une base Access sur un PC Windows sur lequel je souhaite ne rien installer ou rajouter. Et je dois exploiter cette base sous un PC Linux contenant Oracle (9i). Les deux PC sont en réseau.


Solution

Elle ne fut pas simple à trouver. On ne trouve quasiment rien sur le net de ce genre.
Attention, elle n'est valable qu'avec un Linux RHEL 3 & Access 97. Je pense qu'elle est portable sur du RHEL 4 (j'en suis sure même) voir un autre Linux, mais pour Access, mieux vaut rester dans la version 97 ou 2000 (éventuellement 2002), pas au-delà. Cependant, Microsoft Access permet la possibilité d'enregistrer sa base en une version antérieure, donc tout va bien.


Prérequis :

- J'ai trouvé sur le net un magnifique outil : MDBTools ( [ Lien ]). J'ai choisi la version 0.5-1 (la version 0.6pre1 fonctionne, mais uniquement à partir de RHEL 4). Cet outil est tout simplement un driver qui lit les bases Access, et possède quelques commandes simples d'accès. Donc il faut l'installer sur le PC Linux
- Il faut créer un compte sur le PC Windows spécifique pour la base (à cause d'une ligne de commande sous Linux) et mettre en partage le dossier dans lequel il y a la base.
- La base Oracle doit contenir les tables que l'on veut importer (c'est-à-dire qu'elles doivent déjà être créées)

Choix des noms :

J'appelle ma base base.mdb (pas original, mais compréhensible) qui aura une table "table". Et disons que j'appelle mon PC "PC" et le domaine de mon PC windows "domaine". Le compte nécessaire sur le PC Windows : "compte" avec comme mot de passe "password" (pas très dur à suivre comme ça) et le dossier partagé "dossier".

Etapes à Suivre :

Donc je fais les choses dans l'ordre suivant:
1) à l'aide de la commande suivante, je copie ma base sur le PC Linux (dans le répértoire que je choisis)
smbclient //PC/dossier -U domaine\\compte%password -c 'get base.mdb'
2) J'exporte les tables en format csv pour les importer dans Oracle (à répéter pour chaque table):
echo "select * from table" | mdb-sql -p -d ';' base.mdb | grep -v table | grep -v "Row retrieved"
Je fais cela car il est nécessaire de n'avoir que les enregistrements dans le fichier. L'option "-p" sert à enlever la mise en forme du type :
---------
| table |
---------
| plouf |
---------
L'option -d sert à choisir le séparateur.
NB : sur la version 0.6pre1 du MDBTools, les options "-HF" permettent d'enlever les noms des colonnes et les stats du fichier csv, donc pas besoin des "grep".
3) J'importe les tables dans Oracle à l'aide de "sqlldr" après avoir configuré tous les fichiers de control et d'option correctement. (je ne mets pas la ligne de commande, je n'ai pas encore approfondi la question, mais il y a de l'aide sur le site d'Oracle). Il y a notamment selon moi un bon tuto ici : [ Lien ]
4) Je fais des requêtes dans Oracle :)

Voili voilou, très simple vu comme ça, mais fallait trouver, et c'était pas gagné !


Attention : Limitation

La version MDBTools 0.5-1 ne lit pas les tables dont leur nom contient un "_". Pour se faire, il faut installer les rpm du site suivant (à la place de ceux "officiels") : [ Lien ]


Classé sous : base, oracle, dsn, home, listener

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS