>  기사  >  백엔드 개발  >  cx_Oracle 설치 시 발생하는 오류 및 해결 방법

cx_Oracle 설치 시 발생하는 오류 및 해결 방법

Y2J
Y2J원래의
2017-05-08 16:51:103115검색

이 글에서는 주로 Python에서 cx_Oracle 모듈을 설치하는 데 따른 일반적인 문제와 해결 방법을 소개합니다. Windows 플랫폼과 Linux 플랫폼에서 Python에 cx_Oracle 모듈을 설치하는 데 대한 일반적인 문제, 해결 방법 및 관련 주의 사항을 분석합니다. 참조할 필요가 있습니다

이 문서의 예에서는 Python에 cx_Oracle 모듈을 설치할 때 발생하는 일반적인 문제와 해결 방법을 설명합니다. 참고용으로 공유해 주세요. 자세한 내용은 다음과 같습니다.

cx_Oracle을 설치하거나 사용할 때 libclntsh.so.10.1과 같은 Oracle 링크 라이브러리를 사용해야 합니다. 그렇지 않으면 다양한 오류 메시지가 나타납니다. .

수백 메가바이트의 Oracle 클라이언트를 설치하지 않으려면 Oracle Instant Client를 설치하여 이 링크 라이브러리를 얻을 수 있습니다.

소프트웨어 다운로드 주소:

cx_Oracle 홈페이지: cx-oracle.sourceforge.net/
필요한 Oracle 링크 라이브러리 다운로드 주소: www.oracle.com/technology/software/tech/oci/instantclient/index.html

일반적인 오류 및 해결 방법:

1.win32 바이너리 설치

Windows에서 cx_Oracle-5.0-10g.win32-py2.6.msi를 설치한 후 가져오기 시 DLL이 로드 중이라고 보고됩니다. 오류는 다음과 같습니다:

IDLE 2.6.1

>>> import cx_Oracle
Traceback (most recent call last):
 File "<pyshell#0>", line 1, in <module>
  import cx_Oracle
ImportError: DLL load failed: 找不到指定的程序。

해결책:

Oracle 사이트에서 instantclient-basic-win32-10.2를 다운로드합니다. .zip, 압축을 푼 후 oci.dll 파일을 Python 설치 디렉터리의 Lib/site-packages(예: C:/Python26/Lib/site-packages

2. Linux에서의 바이너리 설치

linux_x86_64에서 cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm 설치 시 오류가 보고됩니다.

[root@BJ-UPDATE-01 ~]# rpm -ivh cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
error: Failed dependencies:
    libclntsh.so.10.1()(64bit) is needed by cx_Oracle-5.0.1-1.x86_64

해결책:

cx-oracle.sourceforge.net/BUILD.txt를 참조하세요.

Oracle 사이트에서 basic-10.2.0.4를 다운로드하세요. .0-linux-x86_64.zip을 /opt 디렉터리에 복사하고 압축을 풀면 /opt/instantclient_10_2 디렉터리에 libclntsh.so.10.1이 표시됩니다.

환경 변수 설정

vi /root/.bash_profile

다음 두 줄을 추가하세요:

export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

source /root/.bash_profile을 실행하여 변경 사항을 적용하세요

이 링크 라이브러리에 대한 심볼릭 링크를 생성하세요

cd $ORACLE_HOME
ln -s libclntsh.so.x.x libclntsh.so

cx_Oracle 재설치

--nodeps 매개변수를 주의해서 추가하세요. 그렇지 않으면 위의 오류가 보고됩니다

[root@BJ-UPDATE-01 ~]# rpm -ivh --nodeps cx_Oracle-5.0.1-10g-py24-1.x86_64.rpm
#5.0.3版本不用加--nodeps参数

3. Linux에서 소스 코드 설치

위와 같이 환경 변수와 심볼릭 링크를 설정하고, linux_x86_64에 소스 코드를 설치하고, python

setup.py 빌드를 실행합니다. , 컴파일 중 오류 메시지는 다음과 같습니다.

Connection.c:1169: 경고: 문이 작동하지 않습니다.

Connection.c:1171: 오류: 'udt_Connection'에 'environment'라는 멤버가 없습니다.
Connection.c:1172: 경고: 매개변수 1 전달(인수 2 전달 시 호환되지 않는 포인터 유형 간 변환 중('Environment_CheckForError')
Connection.c:1172: 경고: 인수 2 전달 시 호환되지 않는 포인터 유형 간 변환 중) ('Environment_CheckForError' 중)
Connection.c:1172: 오류:
함수 'Environment_CheckForError'에 너무 많은 인수가 제공되었습니다. Connection.c:1176: 오류: 'udt_Connection'에 이름이 지정된 멤버가 없습니다. '
세션처리'

해결 방법:

이 오류는 버전 5.0.3에서는 발생하지 않습니다.

include 디렉토리는 ORACLE_HOME 아래에 있어야 합니다. 이 디렉토리에는 컴파일에 필요한 소스 파일이 Oracle Instant Client에 포함되어 있지 않습니다. Windows 클라이언트의 D:/oracle/product/10.2.0/client_1/oci/include 디렉터리에서 복사했습니다.

4.import 오류

>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
ImportError: /usr/lib/oracle/10.2.0.4/client64//lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
>>> import cx_Oracle
>>>

이는 SELinux의 제한 사항 때문입니다. 제한을 취소하려면 다음 명령을 실행하세요.

chcon -t texrel_shlib_t cd $ORACLE_HOME/libnnz10.so
chcon -t texrel_shlib_t cd $ORACLE_HOME/libclntsh.so.10.1

5. 런타임 오류

Traceback (most recent call last):
 File "oracle_conn.py", line 9, in ?
  connection = cx_Oracle.Connection(u"oracle/oracle123@CCIP")
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

SELinux를 비활성화하는 것은 여전히 ​​한계입니다

해제하세요. selinux:

명령 실행: vim /etc/selinux/config

selinux=enforcing 또는 permissive를 비활성화로 변경
명령 실행: setenforce 0

6. UNICODE 설치 패키지에 문제가 있습니다

Traceback (most recent call last):
 File "./oracle_conn.py", line 22, in ?
  folderIds=cursor.fetchmany(10)
cx_Oracle.DatabaseError: OCI-22061: Message 22061 not found; No message file for product=RDBMS, facility=OCI; arguments: [T

[관련 권장 사항]

Python 무료 동영상 튜토리얼

2.

데이터 과학에서의 Python 적용

3.

Python 튜토리얼 기본 소개

위 내용은 cx_Oracle 설치 시 발생하는 오류 및 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.