우당탕탕 개발 블로그 도전기

[Oracle] 유동 아이피 사용 시 DB 접속 오류 본문

에러노트

[Oracle] 유동 아이피 사용 시 DB 접속 오류

나루나른 2024. 6. 10. 12:24

 

[추신] : 필자도 구글링하면서 야매로 하다가 된거라 이제 옳게된 방법인지 모르니.. 너무 믿지 말길 바람(06-10 수정본)

● 발단

아이피가 시시때때로 바뀌어서 sqldeveloper로 접속하려고 하면 매번 해당 오류가 발생함

localhost(본인ip)가 일치하지않아 생기는 오류

 
cmd (명령프롬프트)를 이용해 ipconfig로 ip주소를 확인했더니 역시나 ip 주소가 변경되어있음

원래는 102가 아니라 103이 나와야 정상

● 해결방법

1. 오라클 설치 경로에 listner.ora / tnsname의 localhost 설정을 변경

경로 : C:\app\임의\product\18.0.0\dbhome임의\network\admin

이런 식으로 두 파일에 들어가면 localhost를 바꿔야함.

 
※ tnsnames.ora 파일의 경우 위 아래 둘 다 변경해야됨.
 

2. sqlplus를 이용해서 sysdba 계정으로 접속

기본적으로 sysdba는 비밀번호를 볼 수가 없기 때문에 재정의해서 사용함
 
1) sqlplus "/as sysdba" dba 계정으로 sql 접속.
 
2) 접속이 완료되면 alter user sys identified by 임의값; 을 통해 비밀번호를 재지정함.
 
3) 재지정한 값으로 접속
connect sys/임의값 as sysdba 를 이용하면 접속됨. 
 
4) shutdown immediate를 이용해 oracledb 정지 후 컴퓨터 재부팅
원래는 listener를 다시 재접속해야한다는데.. 필자는 그 방법을 몰라서 무식한 방법을 사용함

 

4) listener 재접속 
$ lsnrctl status 명령어로 리스너 상태 확인 

리스너 상태에서 데이터베이스 서비스가 올바르게 등록되었는지 확인하는 명령어가  서비스가 올바르게 등록되지 않은 경우, listener.ora 파일을 확인해야함.. 위의 파일 경로 참조

 

listener의 설정을 완료했다면 lisetener를 재시작 해야한다.

$lsnrctl stop 중지 명령어
$ lsnrctl start 시작 명령

 

transname.ora의 파일 설정도 자기의 ip, 포트번호와 맞는지 확인해야한다(주의) 

 

만약에 리스너 상태를 확인해도 DB에 연결이 되지 않는다면 DB 인스턴스의 상태도 확인해야 한다.

 

SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE; 인스턴스의 상태를 확인하는 명령

 

$STARTUP; 실행중이 아니라면 시작하는 명령어 

 

그 외에도 인스턴스가 listener에 정상적으로 등록되지 않았다면 LOCAL_LISTENER 매개변수 설정해야한다.
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=본인 ip주소)(PORT=1521))';

ALTER SYSTEM REGISTER; 강제로 동적 등록

 

그리고 제대로 등록이 되었는지 리스너의 상태를 확인한다.

$lsnrctl status

 

모든 명령어의 입력은 cmd(명령프롬프트)를 관리자 권한으로 실행해서 sqlplus "/as sysdba"로 접속해서 실행한다.

제대로 설정된 상태다

 

이 방법을 이용해 Java IDE와, sts(String Tool)에서 oracle DB 접근이 불가능했던 현상을 해결했다(현타온다)

jsp 페이지에서 oracle db 연동 성공

 

sql plus를 통해 db에 insert 됬는지도 확인완료