본문 바로가기

DB/Oracle

ORACLE 정적 리스너 설정시 에러 해결법

oracle on docker

맥 환경이라 oracle을 docker에 띄어둔 상황 docker os는 linux다.

 

 

리스너를 구성하고 돌렸더니 첫번째로 뜬 에러 

start 하면 TNS-01192가 뜬다. 

알고보니 정적리스너 만들려고 SID태그?에 SID_DESCRIPTION 지정했는데,

태그를 SID_LIST_LISTENER 태그로 감싸주지 않아서, 정적 리스너 설정값으로 인식이 안된 상황.

 

 

SID_LIST_LISTENER 로 감싸주고 나서

(여기서 마지막 단어인 LISTENER는 listener.ora 파일 내부에 정적리스너로 지정할 listener 이름이 와야함)

TNS-01192는 해결 완

 

두번째로 뜬 에러는

TNS-01201 : listener cannot find executable /.../... for SID '...'

찾아보니 oracle_home 경로가 안맞을 경우 뜬다고 해서

 

env | grep ORACLE_HOME 으로 홈경로 찾아준 다음에

SID_DESCRIPTON 밑에 다시 붙여넣기 해줬다.

 

 

 

세번째는 에러는 아닌데 

listener.ora 수정하고 리스너 재시작 하면 띄우려는 listener 'SAMPLEDB'  상태가 자꾸

Instance status UNKNOWN임.

('ORCL', status는 READY 상태로 표시되는 건 해당 리스너가 동적 리스너라는 뜻.

 KNOWN 표시가 정적 리스너라는 뜻)

 

알고보니

정적리스너로 연결해주려는 tnsnames.ora파일에 데이터 베이스 인스턴스 지정을 잘못해줬다.

 

ORCL=
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = ORCL)
  )
)

여기서 SERVICE_NAME에 DB 인스턴스

select name from v$database; 했을 때 조회 되는 sid 를 적어줘야 하는데 잘못적어서 서비스 UNKNOWN이 떳던 것.