*. 상황설명
서버쪽 리스너와 클라이언트쪽 tnsnames.ora의 설정을 맞게 했음에도 클라이언트에서 아래의 에러가 뜨면서 접속이 안된다.
SQL> conn scott/tiger@orcl
ERROR:
ORA-12514: TNS:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함
참고로 클라이언트에서 tnsping orcl 을 날리면 잘 날아간다.
C:\Documents and Settings> tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 30-7월 - 2012 09:44:07
Copyright (c) 1997, 2010, Oracle. All rights reserved.
사용된 매개변수 파일:
C:\app\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
별칭 분석을 위해 TNSNAMES 어댑터 사용
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101
)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))에 접속하려고 시도하는중
확인(0밀리초)
*. 분석
1. 서버쪽의 lsnrctl status 명령을 날려 리스너의 상황을 보았다.
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 30-JUL-2012 10:50:54
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /app/oracle/product/11g/network/admin/listener.ora
Listener Log File /app/oracle/diag/tnslsnr/sg/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.101)(PORT=1521)))
The listener supports no services
The command completed successfully
아래서 두번째 줄 처럼 The listener supports no services의 상태다. 인스턴스가 떠 있어야 함에도 그러질 못하고 있는 상황이다.
2. 로그를 확인해 보았다.
<msg time='2012-07-30T10:54:29.563+09:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='sg.net'
host_addr='UNKNOWN'>
<txt>30-JUL-2012 10:54:29 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=sg.net)(USER=oracle))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=186646784)) * status * 0
</txt>
</msg>
리스너의 HOST에 IP로 적어줬음에도 로그에는 sg.net으로 찍혀있다.
*. 의심
서버쪽의 /etc/hosts 상황을 확인해 보았다.
-- /etc/hosts 상황
127.0.0.1 sg.net localhost.localdomain localhost
192.168.56.1 sg.win
큰 문제 없어 보였다.
애매한 점이 있어서 아래와 같이 편집후 OS 재부팅까지 해 보았다.
127.0.0.1 localhost.localdomain localhost
192.168.56.1 sg.win
OS 재부팅후 DB startup을 해보았다.
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00130: invalid listener address '(ADDRESS=(PROTOCOL=TCP)(HOST=sg.net)(PORT=1521))'
위의 에러가 나면서 실패.
# ping sg.net
ping: unknown host sg.net
없다고 나온다. 아무래도 문제의 원인인 듯 싶다.
*. 조치
/etc/hosts의 내용을 아래와 같이 편집했다.(서버의 아이피 : 192.168.56.101)
127.0.0.1 localhost.localdomain localhost
192.168.56.101 sg.net
192.168.56.1 sg.win
핑을 날려보니 잘 날아간다.
# ping sg.net
PING sg.net (192.168.56.101) 56(84) bytes of data.
64 bytes from sg.net (192.168.56.101): icmp_seq=1 ttl=64 time=0.656 ms
64 bytes from sg.net (192.168.56.101): icmp_seq=2 ttl=64 time=0.069 ms
DB도 startup 완료.
SQL> startup
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 268437888 bytes
Database Buffers 146800640 bytes
Redo Buffers 6094848 bytes
Database mounted.
Database opened.
리스너를 실행하고 status를 확인 했다.
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.101)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 30-JUL-2012 10:50:54
Uptime 0 days 0 hr. 3 min. 35 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /app/oracle/product/11g/network/admin/listener.ora
Listener Log File /app/oracle/diag/tnslsnr/sg/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.101)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
드디어 인스턴스가 뜬다.
클라이언트에서 접속 시도해보자.
SQL> conn scott/tiger@orcl
연결되었습니다.
접속성공.
오렌지에서도 접속 시도 : 문제없이 접속 완료
*. 결론
서버쪽 /etc/hosts에 아래와 같이 서버의 실제 아이피가 hostname으로 잡혀 있어야 함.
로컬호스트에 hostname이(리스너에서 사용한 이름) 물려 있으면 에러난다.
/etc/hosts의 내용을 아래와 같이 편집(서버의 아이피 : 192.168.56.101)
127.0.0.1 localhost.localdomain localhost
192.168.56.101 sg.net
192.168.56.1 sg.win
*. 아래는 참고할 현재 상황
-- =========================
-- IP 및 환경
-- =========================
ORACLE 버전 : 11.2.0.1.0
서버 IP : 192.168.56.101
서버 OS : CentOS 5
오라클 인스턴스네임(SID) : orcl
클라이언트 IP : 192.168.56.1
클라이언트 OS : WinXP 오라클 엔진설치 후 SQL*PLUS 사용
-- =========================
-- 서버 쪽 listener.ora : HOST는 IP로 직접 적어주는것이 좋음
-- =========================
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /app/oracle
-- =========================
-- 서버 쪽 /etc/hosts 상황
-- =========================
127.0.0.1 localhost.localdomain localhost
192.168.56.101 sg.net
192.168.56.1 sg.win
-- =========================
-- 클라이언트 쪽 tnsnames.ora
-- =========================
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.56.101)
(PORT = 1521)
)
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(SID = orcl)
)
)
-- =========================
-- 클라이언트 쪽 sqlnet.ora : 해당부분 주석# 처리 해준다.
-- =========================
# SQLNET.AUTHENTICATION_SERVICES = (TNSNAMES, NTS)
-- =========================
-- 클라이언트 쪽 C:\WINDOWS\system32\drivers\etc\hosts 상황
-- =========================
127.0.0.1 localhost
192.168.56.101 orcl
'Oracle > Oracle - 이것저것' 카테고리의 다른 글
grid control port 관련 이슈 (0) | 2012.07.18 |
---|---|
현재 PGA 메모리 사용량과 최대 메모리 사용량 조회 (2) | 2012.04.15 |