별다른 지식 없이 맨땅에서 출발해서,
오류들과 싸워가며 세팅했던 흔적을 정리해보려고 한다.
(실패편, 성공편 총 2편 중 본 글은 1편 실패편임)
그동안 localhost로만 사용했던 오라클 DB를 외부에서도 접근할 수 있게 설정하는 과정에서
가장 처음 맞닥뜨렸던 오류이다.

lsnrctl status 명령어를 쳤을 때,
'TNS-01150: 지정된 리스너명의 주소가 틀립니다
NL-00303: NV 문자열에 구문 오류입니다'
라고 뜨는 것을 확인하였다.
해당 오류는 오라클 설치 경로(보통 C:\app\'사용자명'\product\'오라클버전'\dbhomeXE\network\admin) 아래의 특정 위치에 있는 listener.ora 파일의 문법적 오류로 인해 리스너명의 주소가 제대로 잡히지 않아 발생하는 오류였다.
먼저 윈도우 창에서 regedit 을 쳐서 레지스트리 편집기를 열고

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

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

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

각 괄호 부분들이 제대로 닫히는 것도 중요하다는 사실도 알게 되었다.
이후 위 listener.ora 파일을 외부에서 접근 가능하게끔 하는 설정 변경들을 거치면서,

위와 같이 작성하였을 때,

연결되었다는 메시지를 확인할 수 있었다.
하지만 문법적 오류를 잡는 것만으로는 원격 연결이 제대로 되지 않았는데,


몇몇 명령들을 실행해 보았을 때 위와 같은 오류메시지들이 계속 발생하였다.
원인들을 찾아본 결과, ORA-12560와도 연관되어 검색이 된 위 오류들은 OracleService 구성에 문제가 있어 발생하는 것으로 확인되었는데,
-> 명령프롬프트를 관리자 권한으로 실행 후 lsnrctl start 를 실행했을 때 아래와 같은 구체적인 오류 창을 볼 수 있었다.



Listener 서비스가 실행중이 아닌 것을 발견하고, 실행해주려고 하였으나 실행이 되지 않고 계속해서 중지되는 상황..(* 참고 : Oracle Net Configuration Assistant, Net CA 를 사용하면 위 두 파일들을 한번에! 편하게! 구성할 수 있음도 알게 되었다..)

하하...
하지만 이미 해당 파일들을 직접 수정을 통해 연결을 해보기로 하였기 때문에,
최종적으로 해결한 방법은 tnsnames.ora 파일의 설정도 listener.ora와 매칭이 되게끔 잡아주는 것이었다.

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

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

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


로그파일 확인 결과,
TNS-12505: TNS: 리스너가 현재 접속 기술자에서 제공한 SID를 알지 못합니다
오류였다.
알아본 결과, tnsnames.ora 에서 SID를 마음대로 선언하면 안되고,
오라클 설치 시 설정한 SID를 사용해야 함을 알았다.
방법은

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

(* 아마 앞에서 오라클 서비스명의 뒤에 붙었던 ##이 이 의미였던 것 같다.)
은 하지 못했고..
검색을 거치면서 몇가지를 새로 추가로 알아가는 과정에서,
그동안 쓸데없이 수정하고 재배치한 내용이 너무 많아졌다는 생각에
정리 글도 이쯤에서 마무리하고,
다음 글에서는 tnsnames.ora, listener.ora 두 파일을 설치 상태의 원본으로 되돌린 뒤
다시 세팅해서 진행을 해보기로 했다.
이번 포스트는.. '외부에서도 접속 가능한 DB를 구축'하려고 함에 있어,
일단 기본적으로 '서비스' 와 '리스너'가 구분되어 있는 오라클 DB의 특성을 이해하게 되었고,
그리고 해당 서비스(컴퓨터에서 실행되는)들을 중지했다가 재시작했다 해보면서,
각 .ora 파일들에 정의되는 요소들이 가지는 의미, 그리고 프롬프트 명령문들의 의미
등을 알아가는 빌드업 과정이라는 데 의의를 두려고 한다.