begin process at 2010 03 17 04:53:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Oracle

 > 

Divers

 > 

Lecture d'une base via DSN et ODBC sur Linux


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lecture d'une base via DSN et ODBC sur Linux

lundi 7 mai 2007 à 14:33:00 | Lecture d'une base via DSN et ODBC sur Linux

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 !
mercredi 9 mai 2007 à 11:14:05 | Re : Lecture d'une base via DSN et ODBC sur Linux

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 ?
mardi 22 mai 2007 à 15:51:54 | Re : Lecture d'une base via DSN et ODBC sur Linux

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 ]


Cette discussion est classée dans : base, oracle, dsn, home, listener


Répondre à ce message

Sujets en rapport avec ce message

Synchronisation BDD sqlCE vers Oracle [ par atmeitsatme ] Bonjour, je développe actuellement un programme sur pocket pc et je voudrais synchroniser ma base de données locale SQLCE vers la base de données dist récupération d'une date dans une base de données Oracle 9i [ par albancadiot ] Bonjour, j'ai un problème pour quelques chose qui me semble tout bête. Je doit récupérer des dates dans une table Oracle 9i . J'utilise eclipse et j Export base de données SqlServer vers Oracle [ par issam164 ] Bonjour, Je veux exporter une base de données SqlServer vers une HELP :comment Afficher ORACLE_SID ORACLE_HOME ?? .. [ par karamilano ] slt j aimerais savoir comment est ce que je peux afficher le contenu des variables d environnements ORACLE_SID , ORACLE_HOME , ORACLE_BASE et NLS_LANG Connaitre le nombre de connexion à une base de données Oracle [ par EmacLi ] Bonjour,Je voudrais savoir le nombre de connexion en cours sur une base de données Oracle.Y a t'il une requête pour ça ?Merci d'avance Creation de base de données [ par bruce207 ] Bonjour,je débute avec Oracle dont j'ai installé la version 8 sur ma machine. Pour créer une base de données j'ai utilisé Oracle Database Assistant do IMPORTER DES FICHIER DBF A UNE BASE DE DONNEES ORACLE 9I [ par sws2007 ] bonjour comment importer des données d'une application qui tourne sur une base dbase (extension du fichier dbf) vers une base oracle 9i heeeeeeeeeeeee d'une base sql server vers base oracle [ par laymouna98 ] salut à tous j'ai pas mal de temps que je cherche une solution pour créer une base de données oracle à partir d'une base de donnée sql server j'a Comment attaquer une base de Données Oracle sous Windev 9 ou 10 [ par eatekeolivier ] Salut, Je besoin que l'on m'aide à avoir une base de données externes que l'Hyper file de WINDEV, pour cela je voudrais utiliser ORACLE. Alors j'ai be


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales