programing

[01000][unixODBC][드라이버 관리자]lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so '을(를) 열 수 없음: 파일을 찾을 수 없습니다.

itmemos 2023. 7. 6. 21:52
반응형

[01000][unixODBC][드라이버 관리자]lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so '을(를) 열 수 없음: 파일을 찾을 수 없습니다.

리눅스 서버에서 오라클에 액세스하려고 합니다.unixODBC를 사용하고 있습니다.

isql을 사용하여 오라클에 액세스하려고 하면 드라이버 관리자가 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

odbc inst.이니

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

그런 다음 isql을 사용하여 오라클에 액세스하면 다음 오류가 발생합니다.

 [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

odbcinst.ini에 오타가 있었습니다.저는 수정했지만 여전히 같은 오류입니다.

 [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

LD_LIBRARY_PATH 업데이트로 원래 문제를 해결했지만 32bit Oracle 클라이언트를 사용하려고 하므로 문제가 다시 발생합니다.

/opt/oraClient/11.2.0.4_32/ 디렉토리에 32비트 Oracle 클라이언트를 설치했습니다.

odbc inst를 수정했습니다.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

오류:

[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

32bit Oracle 클라이언트를 사용해야 하는 경우, 무엇이 잘못되었습니까?나는 그것이 환경적 변수에 관한 것이라는 것을 알고 있습니다.

 [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

추적을 사용할 수 있지만 여기에 문서를 첨부할 수 없습니다.이메일을 보낼 수 있습니다.

추가 디버그 정보:

 [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)

몇 가지 문제를 일으킬 수 있는 "찾을 수 없음"을 알 수 없습니다.

 [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

다음은 가장 최근의 환경 출력입니다.

 [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

이 오류는 오해의 소지가 있습니다.

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

다음을 실행하여 실제 누락된 파일을 추적할 수 있었습니다.

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

이것은 일련의 파일을 반환했고 하나는 다음과 같이 말했습니다.

libodbcinst.so.2 => not found

그것이 나의 범인이었습니다.그리고 제가 필요한 링크를 만들었고 오류가 사라졌습니다.

참조: http://mailman.unixodbc.org/pipermail/unixodbc-support/2011-November/003018.html

인턴트클는이 .lib디렉토리입니다.패키지를 다운로드하고 기본 패키지와 동일한 위치에서 압축을 푼 경우libsqora.so.11.1파일은 바로 아래에 있을 것입니다./usr/local/easysoft/oracle/InstantClient112.

.ini는 다음을 가리켜야 합니다.

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

확장자를 하세요; 을 하만확기십오시하록지에 하는 것이 이 확장자를 소프트 링크로 연결할 수 있습니다.libsqora.so.so파일을 압축 해제(?)한 후 하위 디렉터리로 이동하면 다음이 필요합니다.

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

압축을 푼 후 인스턴트 클라이언트 파일을 다시 정리한 것 같습니다.lib디렉토리입니다.그것이 당신에게 직접적인 문제를 일으킬지 모르겠습니다.하지만 당신은 또한 설정하지 않았습니다.LD_LIBRARY_PATH설치 지침에서 알 수 있듯이 다음과 같습니다.

설치 단계:

  1. 플랫폼에 적합한 인스턴트 클라이언트 패키지를 다운로드합니다.모든 설치에는 기본 패키지가 필요합니다.

  2. 패키지를 "instantclient"와 같은 단일 디렉토리에 압축을 풉니다.

  3. 환경의 라이브러리 로드 경로를 2단계("인스턴트 클라이언트")의 디렉토리로 설정합니다.대부분의 UNIX 플랫폼에서 LD_LIBRARY_PATH는 적절한 환경 변수입니다.Windows에서는 PATH를 사용해야 합니다.

  4. 애플리케이션을 시작하고 즐기십시오.

분명히 (4)단계는 아직 작동하지 않지만, (3)단계를 수행하지 않았기 때문이라고 생각합니다. 그리고 파일을 분할했기 때문에 문제가 발생할 수도 있습니다. 두 가지를 모두 포함해야 할 수도 있습니다..../InstantClient112그리고..../InstantClient112/lib에서LD_LIBRARY_PATH변수.그리고 수정된 값이 내보내졌는지 확인합니다.파일을 다시 정렬하려는 이유가 무엇인지 잘 모르겠습니다.

sudo apt-get install libaio1 libaio-dev

언급URL : https://stackoverflow.com/questions/22999798/01000unixodbcdriver-managercant-open-lib-usr-local-easysoft-oracle-inst

반응형