Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

한바다

[톰캣실행오류]XE 인스턴스가 리스너에 등록되지 않은 오류 본문

카테고리 없음

[톰캣실행오류]XE 인스턴스가 리스너에 등록되지 않은 오류

한바다진화 2025. 4. 6. 14:08

톰캣실행시 오라클 연결 "XE 인스턴스가 리스너에 등록되지 않는 오류가 반복 발생되었다

[오류코드]

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

 

[해결방법]
cmd 관리자 권한으로 진행한다

① 리스너 재시작 명령어 실행:

lsnrctl stop

잠시 기다렸다가 다시:

lsnrctl start

 

② 다시 SQL*PLUS 접속 후 인스턴스 재등록

sqlplus sys/비밀번호 as sysdba
Sql
ALTER SYSEM REGISTER;

③ 리스터 상태 확인

lsnrctl status

리스터가 정상적으로 등록 되었다면 아래와 같은 문장이 보여야 한다!

Service "XE" has 1 instance(s).
 Instance "XE", status READY, has 1 handler(s) for this service...

 

위와 같이 진행 했음에도 계속적으로 xe가 등록되지 않아 XE  인스턴스 수동등록을 시도 하였다

Sql
ALTER SYSTEM SET LOCAL_LISTENER = '';
ALTER SYSTEM REGISTER:

그 다음 exit 명령어로 sql을 빠져나와 다시 리스너 상태( lsnrctl status) 를 확인한다.

그래도 안되어서 xe 설치경로 -tnsnames.ora 파일을 확인 하였다

[폴더위치]

D:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN

해당 파일을 메모장으로 열어서 아래 내용이 포함되어 있어야 했다.

 

위와 같이 리스터 XE는 포함되어 등록이 되어 있었다!!

추가로 Oracle 인스턴스 이름 확인 명령어는 아래와 같다

Sql
SELECT instance_name FROM v$instance;

 

그러나 여전히 XE 서비스가 등록되지 않는 것은 XE 서비스가 리스너에 나타나지 않는 건 데이터베이스 인스턴스가 정상적으로 올라와 있지 않거나, 리스너와 연결되지 않았기 때문이다

그래서 SQL*PLUS에서 다음 명령어를 실행 하였다

Sql
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))';
ALTER SYSTEM REGISTER;

 

그 후 sql을 빠져나와 exit 다시 리스너 상태 확인 한다

lsnrctl status

[실행한 CMD 명령어]

SQL> ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))';

System altered.

SQL> ALTER SYSTEM REGISTER;

System altered.

SQL> EXIT
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

C:\WINDOWS\system32>lsnrctl staus

LSNRCTL for 64-bit Windows: Version 11.2.0.2.0 - Production on 06-4월 -2025 12:38:55

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

NL-00853: undefined command "staus".  Try "help"

C:\WINDOWS\system32>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.2.0 - Production on 06-4월 -2025 12:39:11

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.2.0 - Production
Start Date                06-4월 -2025 12:27:33
Uptime                    0 days 0 hr. 11 min. 42 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   D:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
Listener Log File         D:\oraclexe\app\oracle\diag\tnslsnr\DESKTOP-FRJOKT5\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-FRJOKT5)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully

 

Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...

드디어 "xe"가 리스너에 등록이 되었다!!!!

 

또한 이클립스에서 톰캣 에러 8080포트를 누가 자꾸 쓰고 있다고 하여 아래와 같이 톰캣 포트번호를 변경해주었다

Server>Tomcat v10.1 Server at localhost더블클릭

더블클릭하여 아래와 같이 Overview가 나오면 Port영역에서 HTTP/1.1을 더블 클릭하여 포트번호를 8888 또는 9090,8282등 사용되지 않는 번호로 변경한다. 그리고 변경사항 ctrl+s로 저장한다.

 

[브라우저 오류 코드]

HTTP 상태 404 - 찾을 수 없음
타입 상태 보고
메시지 요청된 리소스 [/LoginServlet]은 가용하지 않습니다

[코드 수정 부분1]

위 코드에서 /LoginServlet은 브라우저 주소에 쓰이는 경로로 web.xml에서 수동으로 서블릭 등록 필요하다

web.xml은 src/main/webapp/WEB-INF/web.xml 위치에 있어야 한다

위처럼 서블릿 이름과 클래스 경로, URL 패턴을 적어줘야 함!!

[코드 수정 부분2]

위와 같이 web.xml을 수정 해주었는데도 동일한 오류가 발생한 이유는  웹브라우저에서 요청한 URL과

web.xml에 등록된 URL 매핑이 서로 일치하지 않기 때문이였다!!

- 브라우저 주소창에서 접속한 URL은 http://localhost:8888/LoginServlet이고

- web.xml의 URL 매핑설정은 <url-pattern>/LoginServlet</url-pattern>

그러나 현재 프로젝트 이름은 MemberMVC으로 즉 이서블릿은 MemberMVC라는 Context 하위에서 실행되어야 한다!

 

그리하여 수정한 부분은

login.jsp에서 로그인 요청을 하는 form 태그에 아래와 같은 코드가 입력 되어 있었는데

<form action="../LoginServlet" method="post">

위 코드는 상대 경로를 사용하고 있어서 실행 환경에 따라 LoginServlet을 정확히 찾지 못할 수 있다. 따라서

다음처럼 절대 경로 방식으로 변경해야 한다

<form action="${pageContext.request.contextPath}/LoginServlet" method="post">

▶ pageContext.request.contextPath는 현재 웹 애플리케이션의 컨텍시트 경로, 즉 MemverMVC를 자동으로 가져온다.

결과적으로 브라우저는 다음주소로 요청하게 된다

http://localhost:8888/MemberMVC/LoginServlet

 

위와 같은 과정으로 작은 프로젝트 내 회원가입과 로그인 성공이 이루어 졌다