2016년 10월 12일 수요일

맥OS <-> 오라클 접속

MacOS에서 오라클(Oracle)에 접속하는 방법을 소개한다.

  • 파이썬 cx_Oracle 인터페이스를 통한 연결
  • SQLPLUS 도구를 통한 연결


먼저 파이썬 cx_Oracle 인터페이스를 통한 접근 방법이다.

오라클에서 다음 두 가지 파일을 다운 받아서 압축을 푼다.
unzip instantclient-basic-macos.x64-11.2.0.4.0.zip
unzip instantclient-sdk-macos.x64-11.2.0.4.0.zip

압축을 풀면 다음 디랙토리가 생성된다.
instantclient_11_2

환경 변수를 등록한다.
export ORACLE_HOME=$(pwd)/instantclient_11_2
export DYLD_LIBRARY_PATH=$ORACLE_HOME:$DYLD_LIBRARY_PATH

cx_Oracle을 설치한다.
pip install cx_Oracle

**
ORACLE_HOME에 풀려 있는 파일을 참조하여 설치된다.
cx_Oracle이 호출 될때 필요한 라이브러리를 DYLD_LIBRARY_PATH에서 참조한다.

수행 예제 코드이다.
<code>
import cx_Oracle as cx

dsn = cx.makedsn(HOST, PORT, SID)
dbc = cx.connect('ecpadmin', 'ecpadmin', dsn)
print('ORACLE VERSION: ', dbc.version)
csr = dbc.cursor()
csr.execute('SELECT systimestamp FROM dual')
print('TIME: ', csr.fetchone())
dbc.close()

<output>
ORACLE VERSION:  11.2.0.2.0
TIME:  (datetime.datetime(2016, 10, 12, 12, 40, 46, 653846),)


다음은 SQLPLUS 도구를 통해서 접속하는 방법이다.

오라클에서 다음 파일을 다운 받아서 압축을 푼다.
unzip instantclient-sqlplus-macos.x64-11.2.0.4.0.zip

압축을 풀면 다음 디랙토리가 생성된다.
instantclient_11_2

환경 변수를 등록한다.
export PATH=$ORACLE_HOME:$PATH

접속 명령 예제이다.
sqlplu <user>/<password>@<host>/<sid>


**
추가로 한글 데이터 비정상 출력 (ex, ????) 해결 방법이다.

먼저 서버의 문자셋을 확인한다.
<sql>
SELECT *
  FROM sys.props$
 WHERE name = 'NLS_CHARACTERSET';
<output>
NLS_CHARACTERSET
AL32UTF8
Character set

오라클 9i 부터는 UTF8 대신에 AL32UTF8를 사용하고 있고,
NLS_LANG 환경 변수 수정을 통해서 해결 할 수 있다.

터미널 환경에서 적용하는 방법이다.
export NLS_LANG=.AL32UTF8

파이썬 스크립트에서 적용하는 방법이다.
import os 
os.environ["NLS_LANG"] = ".AL32UTF8"


참조

OCI (Oracle Call Interface)
오라클에서 제공하는 C 언어로 만든 인터페이스다.
편리하고 높은 성능과 안정성을 제공한다.

라이브러리 경로
On UNIX platforms you must ensure that LIBPATH environment variable is set properly to pick up the shared libraries at runtime. (UNIX gurus will understand here that LIBPATH actually translates to LD_LIBRARY_PATH on Solaris and Linux, SHLIB_PATH on HP-UX, DYLD_LIBRARY_PATH on Mac OS X, and stays as LIBPATH on AIX).

테스트 환경
MacOS Sierra
Python 3.5.1

0 개의 댓글:

댓글 쓰기