오라클과 Dbeaver를 무려 5시간 동안 세팅만 했다. 그 과정에서 다음과 같은 오류를 겪었다.
ORA-12541
ORA-12518
TNS-12537
오라클 설치 후 도스창을 통해 오라클 자체는 정상적으로 실행되는 것을 확인했다. 그리고 Dbeaver로 처음 연결을 시도하자, 다음과 같은 에러가 발생했다.
ORA-12541 데이터베이스에 접속할 수 없습니다. %에 리스너가 없습니다
먼저 한시간 정도는, 버전이라던가 잔여파일의 문제이지 않을까 싶어서 계속 오라클을 지웠다 깔았다를 반복했다. 또는 컴퓨터를 재부팅하거나 해보았다. 현실부정의 단계였던 것 같기도 하다..
그래도 해결되지 않자, 현실을 받아들이고 구글에 검색해서 나온 대부분의 방법을 시도해보았다.
1. 도스창에서 lsnrctl status명령어로, 리스너 실행상태 확인 및 재시작 -> 이미 실행중
2. 도스창에서 sqlplus를 실행해, SELECT status FROM v$instance;로 데이터베이스 실행여부 확인 -> 이미 실행중
3. 방화벽에서 1521 포트 열어주기 -> 의미가 있었는진 모르겠으나 일단 시도
이 외에도, Dbeaver 연결화면에서 데이터베이스 이름, sid/servicename, Host 등을 계속해서 변경해보며 시도해보았다. (참고한 블로그들에서 DB명으로 ORCL을 쓰는 사람도 있고, XE를 쓰는 사람도 있었다)
위 방법을 총동원해서 시도해보니 위 에러에서 다음 에러인 ORA-12518로 에러 문구가 바뀌었다. 1,2,3번은 이미 실행중인 상태였어서 상관없는 것 같고, 느낌상 방화벽을 설정한게 원인인 것 같지도 않다. 해결된 시간상 짐작컨데 Host를 localhost 대신 본 기기의 ip주소를 직접 적어준 것이 해결원인인 것 같다.
앞서 말한 것처럼, 다음 오류로 인해 여전히 연결되지 않는 것은 마찬가지였다.
ORA-12518: TSN:리스너는 클라이언트 연결을 처리할 수 없습니다.
역시나 구글링을 해가며 해결을 시도했다. 그런데 마찬가지로 에러문구에 리스너라는 말이 등장해서인지 이전 오류와 비슷한 해결방식이 많았다. 그러나 아까는 애써 외면했던 괴상한 방식들을 결국 시도해볼 수 밖에 없었다.
갈수록 늘어가는 도스창에, 처음보는 명령어와 설정창에, 헤매면서 점점 더 지옥 같아졌다...
SELECT COUNT(*) FROM v$session;로 현재 연결 수 확인(300에 가까우면 한계이므로 재설정 필요) -> 연결수 98이었음(아마)lsnrctl services를 실행, 다음 문구 출력 확인ALTER SYSTEM REGISTER; 실행마지막으로 chatgpt에게 물어보니, 아래 경로의 에러 로그파일을 확인해 혹시 다른 오류코드가 발견되진 않는지, 특히 TNS-12537가 있진 않은지 확인해보라고 하였다.
C:\oracle\diag\tnslsnr\{HOSTNAME}\listener\alert\log.xml
정말로 해당 코드가 존재했고 그 부분을 복사해서 다시 chatgpt에 붙여넣었다.
여기까지 상황으로 보아, 위 ORA-12518 에러가 뜨는 원인이 TNS-12537 에러와 연결되는 것 같아보인다.
chat gpt가 시킨걸 요약하면 다음과 같다.
1️⃣ PMON 프로세스가 실행 중인지 확인 (ps -ef | grep pmon)
2️⃣ 데이터베이스 강제 등록 (ALTER SYSTEM REGISTER;) 후 lsnrctl services로 확인
3️⃣ 리스너 설정 파일 (listener.ora) 확인 후 리스너 재시작
4️⃣ DB 세션 리소스 (v$resource_limit) 확인 후 processes, sessions 증가
여기서 1, 2번은 시도해보았으나 달라진 건 없었다.
결국 여기서 3번 방법을 통해 해결할 수 있었다.
두 번째 오류 해결시도 5번에서 언급한 listener.ora 파일을 다시 확인하여, SID_NAME = XE가 데이터베이스의 실제 SID와 일치하는지 확인 후 리스너 재시작 하라는 부분이 chat gpt의 설명 중에 있었다.
그런데 이 SID_Name은 두 번째 해결 시도의 6번에서 생성한 DB에 대응되는 부분이었는데, 이때 전역DB명과 SID를 모두 ORCL로 작성했었다(언급한 블로그에서 시킨대로). 또한 실제 SID_NAME을 sqlplus에서 select instance_name from v$instance;를 통해 확인한 결과 xe로 나왔다. 다시말해, listener.ora파일엔 ORCL, 실제는 xe이므로 서로 달랐다.
따라서 이를 실제 SID_NAME인 xe로 통일해주어야 했는데, 이 때 두 번째 해결방법 6번의 net manager에 다시 들어가서 ORCL을 모두 xe로 다시 바꾸어주었다.(chatgpt에 따르면 대소문자도 구분하여 통일해야 한댔다)
그 후, Dbeaver에 들어가 데이터베이스명을 xe로 입력하고 테스트 접속을 시도하니 드디어 성공했다.
* 참고로, Host명을 localhost로 쓰면 안되고 첫번째 오류의 해결과 관련있는지 내 로컬IP를 직접 입력한 그대로 사용해야한다. 그리고 sid/service name 선택은 아무거나 해도 상관없었다.
* 도스창에서 명령어로 디렉토리를 찾아다니거나 listener.ora 또는 로그 파일의 내용을 확인할 수 있는 역량이 있어야 위 해결 방법을 따라올 수 있다.