프로그래밍 PROGRAMMING/파이썬 PYTHON

[PYTHON] cx_Oracle에서 sid를 인식하지 못할 때 : ORA-12514 오류

매운할라피뇽 2021. 11. 30. 13:36
반응형

파이썬 ORA-12514

 

파이썬에서 오라클 데이터베이스에 접속하고자 할 때 가끔 접속이 안되고 ORA-12514 : TNS:listener does not currently know of service requested in connect descriptor 오류가 뜨는 경우가 발생하는 경우가 있습니다. 항상 발생하는 경우는 아니고 데이터베이스에 따라서 오류가 날 때가 있고 안날 때가 있습니다. 일반적으로는 cx_Oracle에서 제공하는 connect 를 사용해서 접속이 가능하지만 오류가 날 경우에는 다른 방식으로 접속을 세팅해야 합니다.

 

ORA-12514 접속 오류

 

아래와 같이 설정정보를 정확하게 넣어도 connect를 하려고 하면 ORA-12514 오류가 발생하는 경우가 있습니다.

import cx_Oracle

config_ip = '127.0.0.1:1521/ora11g'
config_id = 'test'
config_pwd = 'test#'


try:
    connection =  = cx_Oracle.connect(config_id, config_pwd, config_ip)
except ConnectionError as e:
    print(e)

 

TNS에서 SID를 인식하지 못하는 경우에는 cx_Oracle에서 제공하는 makedsn 함수를 사용하여 설정을 세팅해주면 된다.

 

import cx_Oracle

config_ip = '127.0.0.1'
config_port = '1521'
config_sid = 'ora11g'
config_id = 'test'
config_pwd = 'test#'


try:
    # dsn_info = cx_Oracle.makedsn(HOST_NAME, ORACLE_PORT, SERVICE_NAME(OR SID))
    dsn_info = cx_Oracle.makedsn(config_ip, config_port, config_sid)
    connection =  = cx_Oracle.connect(config_id, config_pwd, dsn=dsn_info)
except ConnectionError as e:
    print(e)

 

makedsn 함수에는 ip, port, sid 순으로 dsn 정보를 입력하고 해당 정보를 connect 함수의 인자값으로 넘겨주면 됩니다. 그러면 TNS에서 정상적으로 SID 를 인식하고 접속이 완료됩니다. 물론 SID 자체가 대소문자가 다르거나 정보가 부정확하다면 makedsn 함수를 쓰더라도 정상적인 접속이 안될 경우가 있으니 접속정보를 다시 확인할 필요가 있습니다. 

 

 

 

 

반응형