Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
*참고 : https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html
(pip, rpm, zip파일등을 이용한 다양한 설치 방법이 자세하게 설명되어 있음)
1. python : 2.7.5, OS : RHEL7.4 64bit, Oracle database : 11.2인 Linux환경에서 RPM을 이용하여 설치/설정하는 방법이다.
2. cx_Oracle을 Linux에 설치한다.
- 다운로드 URL : https://pypi.org/project/cx-Oracle/5.3/#files
- 다운로드 받은 rpm파일을 서버에 업로드 한후 다음 명령으로 설치한다.
: sudo yum install cx_Oracle-5.3-11g-py27-2.x86_64.rpm
3. Oracle Client를 설치한다.
- 다운로드 URL : https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/
- 다운로드 받은 rpm파일을 서버에 업로드 한후 다음 명령으로 설치한다
: sudo yum install oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64.rpm
4. Instant client 19이후 버젼에서는 관련 라이브러리를 자동으로 잡아주지만 설정되지 않는 경우는 다음과 같이 설정해준다.
sudo sh -c "echo /usr/lib/oracle/19.9/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig (확인 : sudo ldconfig -v)
5. 4번과 같이 해도 python에서 "import cx_Oracle"하면 ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory같은 오류가 발생하는데..
이런 경우는 LD_LIBRARY_PATH값을 확인하여 그 경로에 가서(cd ${LD_LIBRARY_PATH}) oracle instant client가 설치된 경로의 library파일을 링크 걸어준다.
(예, sudo ln -s /usr/lib/oracle/19.9/client64/lib/libclntsh.so.19.1 libclntsh.so.11.1)
6. python shell을 실행하여 "import cx_Oracle"을 입력하고 엔터하여 import시 오류가 발생하지 않는지 확인한다.
7. 아래와 같은 python프로그램을 작성하여 수행해본다.
-------------------------------------------------------------------------
import cx_Oracle
import os
#한글지원방법
os.putenv('NLS_LANG', '.UTF8')
# 함수 정의
def connect():
#라이브러리 연결(이거 설정하면 AttributeError: 'module' object has no attributes 'init_oracle_client'오류가 발생한다. 이거 생략하고 실행하면 잘 수행됨)
#cx_Oracle.init_oracle_client(lib_dir=r"D:\8_Programs\Oracle\instantclient_19_9")
#cx_Oracle.init_oracle_client(lib_dir=r"/usr/lib/oracle/19.9")
con_ip='localhost:1526/testdb'
con_id='user'
con_pw='password'
#연결에 필요한 기본 정보(유저, 비밀번호, 데이터베이스 서버 주소)
connection = cx_Oracle.connect(con_id,con_pw, con_ip)
cursor = connection.cursor()
cursor.execute("""
select *
from member
where name='홍길동'
""")
for list in cursor:
print(list)
cursor.close()
connection.close()
# 함수 실행
connect()
-------------------------------------------------------------------------
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
» | python2.7.4에서 Oracle DB(11.2)를 사용하기 위한 설정(RPM을 이용하여 RHEL 7.4에 설치) | 2021.11.26 | 1057 |
5 | python3.5에서 numpy버젼에 따른 문제점을 조치하는 방법및 pymysql import할때 오류 발생시 조치사항 | 2017.09.28 | 721 |
4 | python test.py실행시 "ImportError: No module named pyspark" 혹은 "ImportError: No module named py4j.protocol"등의 오류 발생시 조치사항 | 2017.07.04 | 938 |
3 | AIX 7.1에 Python 2.7.11설치하기 | 2016.10.06 | 1139 |
2 | python 2.6.6에서 print 'A=' 형태의 사용이 python 3.5.1에서 오류(SyntaxError: Missing parentheses in call to 'print') 발생함.. | 2016.05.27 | 606 |
1 | CentOS6에 python3.5.1 소스코드로 빌드하여 설치하기 | 2016.05.27 | 808 |