로컬 PC에 테스트를 위해서 Oracle XE 11g 버전을 설치해서 사용하고 있다. 그런데 가끔은 연결된 접속이 끊어지고, 다시 연결하려고 하면 아래와 같은 오류 메시지가 발생하면서 접속이 되지 않는 경우가 많다.
아마도 구글에서 검색을 많이 해 보면 대략 다음과 같은 대답들이 존재한다.
- lsnrctl services 를 실행해서 DEDICATED 로 표시된 SID를 사용해라.
- OracleServiceXE 서비스가 죽었으니 다시 실행해라.
- 서버 명이나 유동 IP로 변경되어서 그러니 잘 설정해라. -_-
위와 같은 대답이 틀린 것은 아니지만, 모두 다 환경들이 다를테니 좀 더 객관적인 사실에 근거해서 설명이 되어 있었으면 좋겠다는 생각이다.
일단 오류 메시지를 다시 살펴 보도록 하자.
ORA-12505, TNS:listener does not currently know of SID given in connection descriptor.
즉, 접속 정보에 설정한 SID를 현재 인식하지 못한다는 말이다.
이런 일이 발생할 수 있는 소지는 다양하다. 위에서 언급했던 것과 같이 서버 명이 바뀐 상태이거나 유동 IP라서 서비스가 시작되었을 때의 IP 와 현재 IP 가 다른 경우도 있다.
이런 상황이라면 좀 더 덜 변할 수 있는 상황으로 설정을 변경하면 된다.
그리고 기본적으로 설치되는 Listener의 설정은 명확하게 SID를 명시하지 않고 있다. 따라서 아래와 같이 명시적이 될 수 있도록 수정해서 다시 시작하면 된다.
[ 원본 ]
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 컴퓨터 명)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
[ 수정본 ]
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(GLOBAL_DBNAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
(SID_NAME = XE)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 컴퓨터 명)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
위와 같이 전역 DB 명과 SID_NAME 을 실제 XE 인스턴스에 맞도록 설정해 놓으면 해결이 된다.
** 물론 변경한 후에는 DB와 Listener 를 다시 실행하고 SQL Developer도 다시 실행하면 된다.
** ㅋㅋ... 그래도 안되면 만고의 진리인 재 부팅을 ... -_-... 뭐, 다른 원인이 또 겹쳐있다면 안될 수도.. ㅠㅠ
댓글
댓글 쓰기