잡담/개인보관용

[oracle error] 해결: Socket read interrupted, Authentication lapse 0 ms. 또는 [Eclipse Tomcat error] : server ports required by tomcat are already in use

호 두 2019. 6. 17. 13:39
반응형

oracle error : Socket read interrupted, Authentication lapse 0 ms.

 

또는

 

Eclipse Tomcat error : server ports required by tomcat are already in use

Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.

 

 

 

 

시간 흐름순으로 진행.

 

*참고

oracle sql developer에서 출력 확인한 에러

상태: 실패-테스트 실패: IO 오류: Socket read interrupted, Authentication lapse 0 ms.

 

 

 

 

1. 프로젝트 실습중에 JDBC를 통한 oracle 접속에서 timeout 문제가 발생함

 

 

2. oracle sql developer를 통해 접속을 시도해 보았으나, 해당 계정에서 timeout이 발생함.

 

 

3. 문제 해결을 위해, 

eclipse에서 maven으로 받은 jdbc 드라이브 버전 문제인지 찾아봄

(참고 : https://support.oracle.com/knowledge/Middleware/2051087_1.html )

 

확인결과 버전은 문제 없음. 게다가 oracle sql developer로 접속시도 해보았는데, 해당 계정만 접속이 안되는것을 확인함. 따라서 jdbc가 아니라 oracle db 관련 문제임.

 

 

4. 다음으로 oracle listener가 실행되어있는지 확인함

oracle sql developer에서 다른 계정의 접속을 시도해보았음. 문제없이 접속이 가능했음. 따라서 lisenter 문제는 아니라고 판단됨.

그래도 혹시몰라서 services.msc를 통해 listener의 실행여부를 확인해보았음. 역시 실행중이였음.

 

 

5. 다음은 방화벽 문제일 가능성인데, 이건 localhost 계정이라서 해당사항 없으니 패스.

 

 

6. oracle session이 가득차 있을 가능성.

이를 해결하기 위해 system 계정으로 접속 후(cmd에 sqlplus 입력 후 /as sysdba 이런식으로)

show parameter processes; 실행함

 

출력 된 행중 가장 아래에 있는 processes를 확인하면 됨.

보통은 아래와 같이 출력되는데

name              type           value

processes         integer       1000

 

여기서 SESSIONS = (PROCESSES * 1.1) + 5 임.

 ex> 150 *1.1+5= 170

 

spfile을 사용 하는 경우 아래의 명령으로 변경 가능하다. (DB 재구동 후 반영)

alter system set PROCESSES = 300 scope=spfile; 를 실행하면 된다.

 

참고로 이 값을 변경 했는데도 불구하고 세션에 제한이 걸린다면, 파라미터의 sessions 값을 확인 해봐야 한다.

show parameter sessions; 참고하면 된다. 그리고 만약 세션에 제한이 걸려있으면 프로세스 값을 늘려줘도 접속이 안될수 있다.

( 참고 : https://db.necoaki.net/144 )

 

 

7. 네트워크 포트 확인 후 세션 죽이기

대부분 위의 방법들로 해결이 될 것 같은데 그렇지 않은 경우가 있다

이럴 때는

 

명령 프롬프트에서 

netstat -ano | find "1522"
netstat -an | findstr 8080

netstat -ano | findstr 8080

 

이런식으로 네트워크 포트를 확인해본다. 

그리고

 

taskkill -f /pid 3900

 

이렇게 세션을 강제로 종료해주면 된다.

 

( 참고 : https://toentoi.tistory.com/18 )

 

 

8. 6번 또는 7번을 실행한 후에는 oracle 관련 프로그램들을 재실행해야되는데,

솔직히 그냥 컴퓨터를 재부팅하는것을 추천한다.

 

재실행 시킬려면, window키 + r을 누른 후 services.msc 를 입력 후 실행. 그리고 서비스 관리자에서 OracleListener를 마우스 우클릭 후 시작 or 재실행 해줘야함

 

 

 

 

해결완료!

 

 

* cmd 명령 프롬프트는 관리자 권한으로 실행하셔야 합니다.

 

** 이것들로 해결 안되시면 oracle listener 문제입니다.

 

1. 내컴퓨터 -> 속성 -> 고급 시스템 설정 -> 환경 변수 -> 시스템 변수 -> Path 에서 참조하고 있는 경로에 찾아가셔서 .ora 파일을 찾으셔야 합니다 (listener.ora, tnsnames.ora)

 

2. 시스템 변수 Path가 C:\app\TY\product\11.2.0\dbhome_2\bin 이렇게 되어있다면

C:\app\TY\product\11.2.0\dbhome_2 에서 *.ora를 검색하셔서 찾아가시면 됩니다.(보통은 C:\app\TY\product\11.2.0\dbhome_2\NETWORK\ADMIN 이런 곳에 위치해 있습니다.)

 

3. listener.ora 와 tnsnames.ora 를 잘 확인해보시고 그래도 이상이 없다면

window + r 을 이용해 실행 기능을 이용해 services.msc 를 입력 후 확인합니다.

 

4. 서비스(로컬)이 실행 될 텐데 여기서

OracleOraDb11g_home1ClrAgent

OracleOraDb11g_home1TNSListener

이런걸 우클릭 후 실행 or 재실행 해주면 됩니다.

 

만약 Oracle을 여러개 설치 한 경우 1과 2가 있을 경우,

OracleOraDb11g_home1ClrAgent

OracleOraDb11g_home1TNSListener

OracleOraDb11g_home2ClrAgent

OracleOraDb11g_home2TNSListener

이런식으로 출력될텐데, 위의 2번 항목에서 확인 한 경로(ex) C:\app\TY\product\11.2.0\dbhome_2)에 해당하는 Oracle 서비스만 실행 or 재실행 해주고

나머지는 사용중지 해주면 됩니다.

 

5. 위의 사항들을 적용시킨 후 잠깐 기다렸다가  SQL Developer 에서 다시 접속해보면 정상동작 확인 가능합니다.

반응형