ORACLE DB 외부에서 접근 가능하게 설정하기 (실패편)

김보성·2023년 11월 28일

oracle db

목록 보기
1/2

별다른 지식 없이 맨땅에서 출발해서,

오류들과 싸워가며 세팅했던 흔적을 정리해보려고 한다.

(실패편, 성공편 총 2편 중 본 글은 1편 실패편임)




1. TNS-01150, NL-00303 오류

그동안 localhost로만 사용했던 오라클 DB를 외부에서도 접근할 수 있게 설정하는 과정에서

가장 처음 맞닥뜨렸던 오류이다.

lsnrctl status 명령어를 쳤을 때,
'TNS-01150: 지정된 리스너명의 주소가 틀립니다
NL-00303: NV 문자열에 구문 오류입니다'
라고 뜨는 것을 확인하였다.

1-1. 오류 원인

해당 오류는 오라클 설치 경로(보통 C:\app\'사용자명'\product\'오라클버전'\dbhomeXE\network\admin) 아래의 특정 위치에 있는 listener.ora 파일의 문법적 오류로 인해 리스너명의 주소가 제대로 잡히지 않아 발생하는 오류였다.

1-2. 오류 해결

1-2-1. 경로가 제대로 잡혔는지 확인

먼저 윈도우 창에서 regedit 을 쳐서 레지스트리 편집기를 열고

레지스트리 편집기에서 아래와 같은 경로를 따라가서

(* 마지막 KEY OraDB18Home1 부분은 사용중인 오라클 버전에 따라 달라짐)
위의 ORACLE_HOME 의 값과 ORACLE_SID 의 값들을 확인해서,

listener.ora 파일에서 작성한 경로와 매칭이 되는지 확인하였고,
-> 각각 SID_LIST_LISTENER 아래 해당 부분의 (ORACLE_HOME = 부분과, (SID_NIAME = 부분의 값으로 매칭되어야 한다는 사실을 알았다.

하지만 위 부분만으로 오류가 해결되지는 않았는데,

1-2-2. 괄호 확인

각 괄호 부분들이 제대로 닫히는 것도 중요하다는 사실도 알게 되었다.

이후 위 listener.ora 파일을 외부에서 접근 가능하게끔 하는 설정 변경들을 거치면서,

위와 같이 작성하였을 때,

연결되었다는 메시지를 확인할 수 있었다.




2. TNS-12560, TNS-00530 오류

하지만 문법적 오류를 잡는 것만으로는 원격 연결이 제대로 되지 않았는데,


몇몇 명령들을 실행해 보았을 때 위와 같은 오류메시지들이 계속 발생하였다.


2-1. 오류 원인

원인들을 찾아본 결과, ORA-12560와도 연관되어 검색이 된 위 오류들은 OracleService 구성에 문제가 있어 발생하는 것으로 확인되었는데,

  1. 그 1차적 원인은 명령 프롬프트를 실행할 때 '관리자 권한'이 없기 때문이었다.
    -> 명령프롬프트를 관리자 권한으로 실행 후 lsnrctl start 를 실행했을 때 아래와 같은 구체적인 오류 창을 볼 수 있었다.
  2. 그리고 2차적 문제는 OracleListener가 중지된 채 시작되지 않기 때문이었다.
    자세한 내용을 확인한 방법은, 먼저 윈도우의 '컴퓨터 관리' 창을 열고

    왼쪽 메뉴 중 '서비스 및 응용 프로그램 > 서비스' 를 선택,

    -> 여러 서비스들 중, Oracle과 관련된 서비스(OracleDB18...Listener와 OracleService##)를 확인
    (* 설치한 오라클 버전과, 설치 시 임의 정의한 이름(##)에 따라 서비스명이 달라질 수 있음)
    Listener 서비스가 실행중이 아닌 것을 발견하고, 실행해주려고 하였으나 실행이 되지 않고 계속해서 중지되는 상황..
    -> 그래서 다시 검색을 하며 찾던 중.. listener.ora 파일과 동일 경로에 있는 tnsnames.ora 파일의 설정도 잡아줘야 함을 알게 되었다.

(* 참고 : Oracle Net Configuration Assistant, Net CA 를 사용하면 위 두 파일들을 한번에! 편하게! 구성할 수 있음도 알게 되었다..)

하하...


2-2. 오류 해결

하지만 이미 해당 파일들을 직접 수정을 통해 연결을 해보기로 하였기 때문에,

최종적으로 해결한 방법은 tnsnames.ora 파일의 설정도 listener.ora와 매칭이 되게끔 잡아주는 것이었다.

위와 같이 tnsnames.ora 파일의 설정을 잡아준 후에 lsnrctl start 명령을 실행하였을 때,

정상적으로 실행된 리스너 서비스의 모습을 확인할 수 있었다.





3. Oracle SQL Developer에서 접속이 안되는 문제

명령 프롬프트와 서비스 창에서 각 리스너와 서비스가 정상적으로 동작함은 확인했지만,
Oracle SQL Developer에서 스키마로 접속하려고 하니 접속이 되지 않았다.



3-1. 오류 원인

로그파일 확인 결과,
TNS-12505: TNS: 리스너가 현재 접속 기술자에서 제공한 SID를 알지 못합니다
오류였다.

알아본 결과, tnsnames.ora 에서 SID를 마음대로 선언하면 안되고,
오라클 설치 시 설정한 SID를 사용해야 함을 알았다.

방법은

  1. sqlplus sys as sysdba 로 dba 권한으로 DB에 접속 후,
  2. SID 확인 쿼리문 'select name from v$database;'으로 확인하는 것이었다.

뭔가 당연하게도(?) XE 라는 이름이 찍혔고..

(* 아마 앞에서 오라클 서비스명의 뒤에 붙었던 ##이 이 의미였던 것 같다.)

3-2. 오류 해결

은 하지 못했고..



검색을 거치면서 몇가지를 새로 추가로 알아가는 과정에서,

그동안 쓸데없이 수정하고 재배치한 내용이 너무 많아졌다는 생각에

정리 글도 이쯤에서 마무리하고,

다음 글에서는 tnsnames.ora, listener.ora 두 파일을 설치 상태의 원본으로 되돌린 뒤

다시 세팅해서 진행을 해보기로 했다.


이번 포스트는.. '외부에서도 접속 가능한 DB를 구축'하려고 함에 있어,

일단 기본적으로 '서비스' 와 '리스너'가 구분되어 있는 오라클 DB의 특성을 이해하게 되었고,

그리고 해당 서비스(컴퓨터에서 실행되는)들을 중지했다가 재시작했다 해보면서,

각 .ora 파일들에 정의되는 요소들이 가지는 의미, 그리고 프롬프트 명령문들의 의미

등을 알아가는 빌드업 과정이라는 데 의의를 두려고 한다.


0개의 댓글