web-dev-qa-db-fra.com

[01000] [unixODBC] [Gestionnaire de pilotes] Impossible d'ouvrir la bibliothèque '/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so': fichier introuvable

J'essaie d'accéder à Oracle à partir du serveur Linux. J'utilise unixODBC.

Lorsque j'essaie d'accéder à Oracle en utilisant isql et que j'obtiens une erreur que le gestionnaire de pilotes ne peut pas ouvrir libsqora.so.12.1.

odbc.ini

[NAME]
 Application Attributes = T
 Attributes = W
 BatchAutocommitMode = IfAllSuccessful
 BindAsFLOAT = F
 CloseCursor = F
 DisableDPM = F
 DisableMTS = T
 Driver = Oracle 11g ODBC driver
 DSN = DSN_NAME
 EXECSchemaOpt =
 EXECSyntax = T
 Failover = T
 FailoverDelay = 10
 FailoverRetryCount = 10
 FetchBufferSize = 64000
 ForceWCHAR = F
 Lobs = T
 Longs = T
 MaxLargeData = 0
 MetadataIdDefault = F
 QueryTimeout = T
 ResultSets = T
 ServerName = ServerName
 SQLGetData extensions = F
 Translation DLL =
 Translation Option = 0
 DisableRULEHint = T
 UserID = xxxx
 Password=<password>
 StatementCache=F
 CacheBufferSize=20
 UseOCIDescribeAny=F

odbcinst.ini

 [Oracle 11g ODBC driver]
 Description=Oracle ODBC driver for Oracle 11g
 Driver=/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so
 FileUsage=1

Ensuite, lorsque j'utilise isql pour accéder à Oracle, j'obtiens l'erreur suivante:

 [root@xxxxx lib]# isql -v NAME
 [01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so' : file not found
 [ISQL]ERROR: Could not SQLConnect

J'avais une faute de frappe dans odbcinst.ini. J'ai corrigé mais toujours la même erreur.

 [root@xxxxx tmp]# isql -v NAME
 [01000][unixODBC][Driver Manager]Can't open lib '/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so.11.1' : file not found
 [ISQL]ERROR: Could not SQLConnect


 [root@xxxxx tmp]# ls -l /usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so.11.1
 -rw-r--r-- 1 bin bin 996363 Sep  5  2010 /usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so.11.1

 [Oracle 11g ODBC driver]
  Description=Oracle ODBC driver for Oracle 11g
  Driver=/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so.11.1
  FileUsage=1

ENV

 [root@xxxxx tmp]# env
 HOSTNAME=xxxxx
 SSH2_TTY=/dev/pts/0
 Shell=/bin/bash
 TERM=xterm
 HISTSIZE=1000
 ODBC_DIR=/usr/local/easysoft/unixODBC
 OLDPWD=/usr/local/easysoft
 SSH_SESSION_ID=1424
 SSH_TTY=/dev/pts/0
 LD_LIBRARY_PATH=/usr/local/easysoft/lib:/usr/local/easysoft/unixODBC/lib
 A__z="*SHLVL
 TNS_ADMIN=/usr/local/easysoft/Oracle/InstantClient112/network/
 INPUTRC=/etc/inputrc
 PWD=/tmp
 LANG=en_US.UTF-8
 ODBCSYSINI=/etc/
 HOME=/root
 SHLVL=3
 ODBCINI=/etc
 LESSOPEN=|/usr/bin/lesspipe.sh %s
 Oracle_HOME=/usr/local/easysoft/Oracle/InstantClient112/
 G_BROKEN_FILENAMES=1
 _=/bin/env

 PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/local/easysoft/unixODBC/bin:/opt/oraClient/11.2.0.4/bin

Correction d'un problème d'origine avec les mises à jour de LD_LIBRARY_PATH, mais maintenant il est à nouveau cassé car j'essaie d'utiliser le client Oracle 32 bits.

Client Oracle 32 bits installé dans le répertoire /opt/oraClient/11.2.0.4_32/.

Modifié le odbcinst.ini:

[Oracle 11g ODBC driver]
Description=Oracle ODBC driver for Oracle 11g
#Driver=/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so.11.1
Driver=/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1
FileUsage=1

Erreur:

[root@xxxxx lib]# /usr/local/bin/isql -v NAME                                                      
 [01000][unixODBC]  [Driver Manager]Can't open lib '/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1' : file not found
 [ISQL]ERROR: Could not SQLConnect

Si j'ai besoin d'utiliser le client Oracle 32 bits, qu'est-ce que je fais mal ... Je sais que c'est quelque chose dans les variables environnementales.

 [root@xxxxx lib]# file /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1
 /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

J'active la trace mais je ne peux pas joindre de document ici. Je peux envoyer un e-mail.

Plus d'informations de débogage:

 [root@xxxxx bin]# ldd /opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1
 ldd: warning: you do not have execution permission for `/opt/oraClient/11.2.0.4_32/lib/libsqora.so.11.1'
    linux-gate.so.1 =>  (0xffffe000)
    libdl.so.2 => /lib/libdl.so.2 (0xf7f2b000)
    libm.so.6 => /lib/libm.so.6 (0xf7f02000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xf7ee8000)
    libnsl.so.1 => /lib/libnsl.so.1 (0xf7ecf000)
    libclntsh.so.11.1 => not found
    libodbcinst.so.1 => not found
    libc.so.6 => /lib/libc.so.6 (0xf7d71000)
    /lib/ld-linux.so.2 (0x00134000)

Je n'en reçois pas un "introuvable" qui peut causer des problèmes:

 [root@xxxxx bin]# ls /opt/oraClient/11.2.0.4_32/lib/libclntsh.so.11.1
 /opt/oraClient/11.2.0.4_32/lib/libclntsh.so.11.1

Voici la sortie env la plus récente:

 [root@xxxxx]# env
  HOSTNAME=xxxxx
  SSH2_TTY=/dev/pts/0
  TERM=xterm
  Shell=/bin/bash
  HISTSIZE=1000
  ODBC_DIR=/usr/local/easysoft/unixODBC
  SSH_TTY=/dev/pts/0
        LD_LIBRARY_PATH=/opt/oraClient/11.2.0.4_32/:/opt/oraClient/11.2.0.4_32/lib/:/usr/local/easysoft/Oracle/InstantClient112:/usr/local/easysoft/Oracle/InstantClient112/lib/
  TNS_ADMIN=/opt/oraClient/11.2.0.4_32/network/
  PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/local/easysoft/unixODBC/bin:/opt/oraClient/11.2.0.4_32/bin
  INPUTRC=/etc/inputrc
  LANG=en_US.UTF-8
  ODBCSYSINI=/etc/
  SHLVL=4
  HOME=/root
  ODBCINI=/etc
  Oracle_HOME=/opt/oraClient/11.2.0.4_32/
  G_BROKEN_FILENAMES=1
  _=/bin/env
20
user3521305

Cette erreur est trompeuse:

The file that the error claimed was not present did exist.

J'ai pu chasser le fichier manquant en exécutant:

# ldd /path/to/your/socalled/missing/file.so

Cela a renvoyé une série de fichiers et l'un d'eux a déclaré:

libodbcinst.so.2 => not found

C'était le coupable pour moi. J'ai ensuite créé le lien dont j'avais besoin et le tour est joué, l'erreur a disparu.

réf: http://mailman.unixodbc.org/pipermail/unixodbc-support/2011-November/003018.html

30
user3771500

Le client instantané n'a pas de répertoire lib. Si vous avez téléchargé le instantclient-odbc-linux package et décompressé au même emplacement que le package de base, puis le libsqora.so.11.1 le fichier sera durablement sous /usr/local/easysoft/Oracle/InstantClient112.

Votre fichier .ini doit donc pointer vers:

Driver=/usr/local/easysoft/Oracle/InstantClient112/libsqora.so.11.1

Notez l'extension cependant; vous souhaiterez peut-être l'associer à libsqora.so. Si vous avez déplacé le .so fichiers dans un sous-répertoire après avoir décompressé (?) alors vous aurez besoin de:

Driver=/usr/local/easysoft/Oracle/InstantClient112/lib/libsqora.so.11.1

Il semble que vous ayez réoriganisé les fichiers clients instantanés après la décompression, en créant un répertoire lib. Je ne sais pas si cela vous causera directement des problèmes. Mais vous n'avez pas non plus défini LD_LIBRARY_PATH, comme le suggèrent instructions d'installation :

Étapes d'installation:

  1. Téléchargez les packages Instant Client appropriés pour votre plateforme. Toutes les installations nécessitent le package de base.

  2. Décompressez les packages dans un seul répertoire tel que "instantclient".

  3. Définissez le chemin de chargement de la bibliothèque de votre environnement dans le répertoire de l'étape 2 ("client instantané"). Sur de nombreuses plates-formes UNIX, LD_LIBRARY_PATH est la variable d'environnement appropriée. Sous Windows, PATH doit être utilisé.

  4. Démarrez votre application et profitez-en.

Il est clair que l'étape (4) ne fonctionne pas encore pour vous, mais je pense que c'est parce que vous n'avez pas effectué l'étape (3); et je pense que comme vous avez divisé les fichiers - ce qui pourrait lui-même causer un problème - vous devrez peut-être inclure les deux .../InstantClient112 et .../InstantClient112/lib dans le LD_LIBRARY_PATH variable. Et assurez-vous que la valeur modifiée est exportée. Je ne sais pas pourquoi vous souhaitez réorganiser les fichiers.

3
Alex Poole