안녕하세요~!
주말 내내 뒹굴거리다가... 이렇게 포스팅을 하러 왔습니다 ㅎㅎ
SQL Developer를 설치하고 커넥션을 하려 하면,
이렇게 '상태:실패 -테스트 실패: IO 오류: The Network Adapter could not establish the connection' 에러 메시지가 뜨는 걸 볼 수 있어요.
이에 대한 해결법을 포스팅하고자 합니다.
해당 에러 원인
이 IO오류는 접속연결 방식의 세부 사항이 제대로 설정되어있지 않거나, 서비스가 활성화되어있지 않아 사용될 수 없을 때 발생한다 하네요.
해결 방법
[해결방법 요약]
1. 세부사항 확인
1-1. HOST값 제대로 들어갔나 확인
1-2. 서비스명 확인
2. 서비스,방화벽 체크
2-1. 특정 포트 방화벽 열기
2-2. 서비스 실행 여부 확인
2-3. 환경변수 확인
2-4. 포트번호 변경해보거나 껐다 키거나 재설치.
3. 확인
1. 세부 사항 확인
오라클 설치했을 때 이렇게 경로 지정 해줬었죠?? 요 위치 하위 폴더에 가면 dbhomeXE 디렉터리가 있는데 아래 위치에서 리스너와 tnsname 파일이 있습니다. 오라클에 커넥트 하려면 여기 리스터가 요청을 받아들여야하는데 설정 값이 일치해야해요. 이를 확인해줄거예요.
관련 파일: listener.ora , tnsnames.ora
위치: D;\app\jhnya\product\18.8.0\dbhomeXE\network\admin
가장 최신 버전인 18.0.0에는 여기에 파일이 있더라고요. (저처럼 설치 위치를 따로 지정해준 것이 아니라면 대게 C:app파일에 있습니다
근데 그 이전 버전이라면 (제 노트북에 깔려 있는건 11.2.0버전)
C디렉터리의 oracleexe\app\oracle\product\11.2.0\server\network\ADMIN에 가면 파일이 위치해있습니다.
■ 1-1 HOST값 확인
18버전 HOST값: 내 IP주소
11버전 HOST값: 내 호스트명(컴퓨터명)
18버전의 경우에는 HOST에 IP가 옵니다. IP는 cmd창에서 ipconfig라는 명령어로 내 IP주소를 가볍게 확인할 수 있어요.
<listener.ora파일 XE 18버전>
# listener.ora Network Configuration File: D:\app\jhnya\product\18.0.0\dbhomeXE\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
DEFAULT_SERVICE_LISTENER = XE
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\jhnya\product\18.0.0\dbhomeXE)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\jhnya\product\18.0.0\dbhomeXE\bin\oraclr18.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 110.9.79.68)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
HOST = <자기 IP주소>
HOST값에 ip주소가 잘 위치되어 있는지 확인해줍시다.
(HOST = LOCALHOST 로 적어주어도 됩니다.)
그런데 11버전의 경우 세팅이 좀 다릅니다.
HOST = (컴퓨터이름)
이렇게 넣어주면 돼요. 자신의 컴퓨터 이름의 경우 cmd창에서 hostname 명령어로 확인할 수 있습니다.
위 사진(DESKTOP-3VRQTV3)과 cmd 명령어 결과(DESKTOP-OLJHKDN)와 이름이 다른 이유는 사진은 노트북에서 캡쳐한거고 hostname은 데탑에서 실행한거라 그래요.(다른 컴터에서 함) 아무튼 저기 hostname명령어 쳐서 나온 자신의 컴터이름을 HOST 값에다가 넣어주면 됩니다.
IP나 컴터명을 넣어주는 이 작업은 tnsnames에서도 동일해요. (18버전과 11버전 세팅된 상태를 올려놓을 테니 참고해주세요)
# tnsnames.ora Network Configuration File: D:\app\jhnya\product\18.0.0\dbhomeXE\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 110.9.79.68)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = 110.9.79.68)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
■ 1-2 서비스 네임 확인
tnsnames에 등록되어 있는 서비스 네임이 동일해야 합니다.
XE라고 되어있는 저 부분있죠 저게 서비스명이예요. 빨간색 두 부분이 서로 일치하게 통일시켜줍시다. (파란색 HOST값도 한 번더 확인해주기!) XE부분은 변경되어도 상관 없는데 저 빨간색 두 부분은 일치해야 돼요. 저게 서비스명이라는거!
SQL Plus에서 system으로 로그인 한 후에
show parameter service_names
명령어를 쳐서 등록한 서비스명 VALUE에 XE(서비스명)가 잘 나오는지 확인해봅시다.
이렇게 설정 파일들을 변경해줬으면 서비스 부분을 중지했다가 재실행시켜줘야 해요. (서비스 중지 실행 확인 부분은 아래에 이어 설명하고 있으니 확인해주시면 됩니다.)
2. 서비스, 방화벽 체크
이 에러 원인은 세부사항이 안맞아서도 있지만 서비스가 실행이 안되었을 경우도 있어요.
일단 방화벽을 뚫어줍시다. 기본 설정은 다 관리자 권한으로 실행시켜준다 생각하면 돼요.
■ 2-1. 방화벽 확인
시작에 방화벽치면 바로 방화벽 상태 확인이 나와요 눌러줍시다.
고럼 여기 고급설정을 클릭해주세요.
고럼 이렇게 나오는데 여기서 '인바운드 규칙', 그리고 '새 규칙'을 눌러줍시다. 특정 포트를 허용해줄거예요.
포트 누른 후 다음.
그 다음 열어줄 포트 범위대를 적어주면 됩니다. 하나의 포트만 허용할거면 그 포트만 적어주면 돼요.
저는 1521부터 1550까지 열어줬어요.
연결 허용 후 다음
또 다음.
자신이 알아볼 수 있게 이름을 적은 뒤 마침을 누르시면 끝납니다.
설정 후, 인바운드 규칙 아무거나 클릭해둔 상태에서 'd'를 누르면 d로 시작하는 부분을 찾아 넘어가줍니다 (저는 설정한 이름이 d로 시작해서 d를 눌러줌)
잘 설정된 것을 확인할 수 있어요. 오른쪽으로 스크롤을 조금만 이동하면, 허용된 로컬 포트 부분도 확인할 수 있습니다.
■ 2-2. 서비스 활성화 여부 확인
서비스가 실행중인지 활성화 되어있는지 확인을 해봅시다.
윈도우에 '서비'만 검색해도 서비스가 뜹니다. 관리자 권한으로 실행시켜주세요!
마찬가지로 이름 중 하나를 클릭한 상태에서 o를 누르면 이름이 o로 시작하는 부분으로 넘어갑니다.
여기서 오라클 서비스의 상태가 '실행'인지 체크해주세요.
여기서 Oracle~TNSListener가 실행으로 되어있지 않은 분은 우클릭해서 중지했다가 시작을 눌러주세요. (설정 부분에 변경이 있었다면 재시작해줘야 합니다.)
안돼면 오라클을 껐다 키거나 재부팅 후 다시 시도하면 되어있는 경우가 더러 있습니다.
■ 2-3. 환경변수 확인
이렇게 해도 안됐으면, 추가적으로 설치 위치가 잘 잡혀있는지 확인해봅시다.
시스템 변수 PATH의 설치 위치가 잘 잡혀있는지 확인해주세요
(D:\app\Jhnya\product\18.0.0\dbhomeXE\bin)
저는 설치를 D드라이브에 해서 D인데 그냥 하셨으면 C드라이브에 있을거.. 저 위치에 설치된게 맞는지 확인 한번 하고 경로를 잡아줍시다.
■ 2-4. 포트 변경 / 재부팅 / 재설치..
이래도 안돼면,, 포트번호가 이미 사용중일 수도 있어요. 설정파일을 변경 후 포트번호만 바꿔서 시도를 해봅시다.
안돼서 재부팅까지 했는데 또 안되면 재설치하는게 맘이 편하고 빠를수도..
확인 및 테스트
좀 많아서 막막할 수 있는데, 차근 차근 설정 변경하고 재부팅 하니까 저는 잘 해결됐어요.
일단 리스터가 제대로 동작하는지 확인하려면 프롬프트 창에다가 리스너 서비스 명령어를 쳐줍시다.
lsnrctl services
이렇게 등록한 서비스명이 뜨면 제대로 된 거~!
다시 접속 시도해보기!
설정 파일에 HOST를 ip주소로 했으면 ip를 적어주고 localhost로 했으면 localhost로 적어주세요.
이렇게 테스트를 눌렀을 때 파란색 부분이 '성공'으로 뜨면 해결 완료입니다.
참고하시라고 listener.ora와 tnsnames.ora를 올려드려요 (localhost로 HOST세팅됨) 리스터 파일의 ORACLE_HOME 변수와 ENVS 값은 각자 컴터 설치 위치에 맞게 변경해줘야 합니다.
오늘은 여기까지입니다! 문제가 모쪼록 해결되셨으면 좋겠어요 :)
도움이 되셨다면 공감/광고보답/댓글 중 하나는 어떤가요? 큰 힘이됩니다 ~!
최신 댓글