python cx_Oracle 모듈 의 설치 와 사용 에 대한 상세 한 소개
최근 에 데이터 이전 스 크 립 트 를 써 야 합 니 다.단일 Oracle 의 데 이 터 를 MySQL Sharding 클 러 스 터 로 옮 기 고 Liux 에 cx 를 설치 해 야 합 니 다.오 라 클 은 좀 귀 찮 은 것 같 아 요.정리 하고 정 리 를 해 보 세 요.
Oracle 클 라 이언 트 에 대해 서 는 해당 하 는 python 모듈 만 설치 해 야 하 는 것 이 아 닙 니 다.Oracle),Oracle Client 를 설치 해 야 합 니 다.일반적으로 Instant Client 를 선택 하면 충분 합 니 다.tnsnames.ora 를 설정 해 야 합 니 다(물론 host:port/schema 를 통 해 간단하게 접근 할 수 있 습 니 다).
설치:
1.우선 버 전 을 확정한다.우리 의 Oracle 데 이 터 는 좀 늙 었 기 때문에 나 는 비교적 오래된 버 전 인 Oracle Instant Client 10.2.0.4 를 선택 했다.
2.instantclient-basic 를 다운로드 합 니 다.다운로드 주소:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。여기 서 심각 한 BS Oracle 을 하려 면 먼저 등록 해 야 다운로드 할 수 있 습 니 다.이것 도 됐 습 니 다.관건 은 등록 할 때 비밀 번 호 는 숫자 에 알파벳 이 있 고 알파벳 에 대소 문자 가 있어 야 하 며 적어도 8 자리 가 있어 야 합 니 다.내 은행 비밀번호 보다 더 안전 한 비밀 번 호 를 만 들 라 고 강요 했다.
$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip
3.설치 설정
$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cd instantclient_10_2
$cp * /usr/lib # ,
$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cp -rf instantclient_10_2 /opt/
$vi /etc/profile
export ORACLE_HOME=/opt/instantclient_10_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
$source /etc/profile
4.tnsnames.ora 설정(tns 설정 하지 않 아 도 됨)tnsnames.ora 는 존재 하지 않 습 니 다.스스로 만 들 려 고 했 습 니 다.저 는 이런 방식 을 사용 하지 않 았 습 니 다.관심 있 는 것 은 구 글 이 가능 합 니 다.
5.설치 cx 다운로드Oracle python 모듈
$wget http://downloads.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm
$rpm -ivh cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm
$ls /usr/lib/python2.6/site-packages/cx_Oracle.so # , python , ,
6.검증 및 문제 해결
$python
>>import cx_Oracle
오류 보고:import cxOracle gave ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directoryinstant client 의 동적 라 이브 러 리 를 찾 지 못 했 음 을 표시 합 니 다.환경 변수 가 설정 되 어 있 는 지,유효 하 는 지,버 전이 정확 한 지 확인 하 십시오.
오류 신고:ImportError:./cxOracle.so: undefined symbol: PyUnicodeUCS4_Decode
Google :There is nothing wrong with Debian. Python supports two incompatible
modes of operation for Unicode, UCS2 (the default), and UCS4. Debian uses the default,
Redhat uses UCS4. You need to recompile the extension for UCS-2 mode
(i.e. using a Debian installation); this would fix the undefined symbol: PyUnicodeUCS4_Decode
그래서 python 을 다시 컴 파일 합 니 다.
$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4
$make;make install
재 검증,드디어 정상 import.사용:
1.기본 연결 C 사용 Oracle tns alias
connection =cx_Oracle.connect("tp/tp@ocn_test")
# tns alias
cmd>tnsping ocn_test
TNS Ping Utility forLinux: Version 9.2.0.8.0-Production on 27-SEP-201110:47:48
Copyright (c) 1997, 2006, Oracle Corporation. Allrights reserved.
Used parameter files:
/opt/……/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL =TCP)(HOST =10.20.36.19)(PORT =1520))) (CONNECT_DATA =(SID =ocntest)))
OK (10msec)
2.사용자 입력 비밀번호 연결
pwd =getpass.getpass()
connection =cx_Oracle.connect("tp",pwd,"ocn_test")
3.사용 자 는 Python 명령 에 연결 계 정 정 정 보 를 직접 입력 합 니 다.예 를 들 어 python script.py tp/tp@ocn_test
connection =cx_Oracle.connect(sys.argv[1])
4.Easy Connect 문법 을 사용 하여 드라이브 를 통 해 데이터 베 이 스 를 연결 합 니 다.
connection =cx_Oracle.connect('tp','tp','10.20.36.19:1521/ocntest')
#or
connection =cx_Oracle.connect('tp/[email protected]:1521/ocntest')
5.DSN 으로 TNSNAME 구성
tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')
connection =cx_Oracle.connect('tp','tp',tns_name)
6.SYSDBA 로 로그 인
connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSDBA)
#or as SYSOPER
connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSOPER)
Linux 서버 에서 Oracle 작업 을 수행 하 는 중 오류 가 발생 했 습 니 다.
TNS:listener does not currently know of service requested in connect descriptor
해결 방법:문제 분석http://ora-12514.ora-code.com/한 번 의 고생 끝 에 다섯 번 째 연결 방식 을 사용 하여 이 문 제 를 순식간에 해결 했다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.