OS: Windows Server 2008
DB: Oracle 11g
Network: Private Network (Public IP 공유기 사용)
ㅁ 특정포트로 리스너를 세팅 후 Database 연결
* 시나리오 환경
- 전역 데이터 베이스 명으로 'dbnet.XXX.com'
- 데이터 베이스 SID : dbnet
- Private IP : 10.0.0.4
- 리스너명 : LISTENR_DBNET
- 리스너포트: 1550 (default 1521를 사용하지 않음)
A. 리스너 생성
1. Oracle Net Manager 실행
2. 리스너를 선택 후 [+] 버튼으로 리스너생성
3. [수신위치] 에 탭에 호스트 및 포트 지정
* 서비스 이름 지정의 dbnet은 Database 생성하기 전에 나타나 있지 않음
* 기존에 Database가 생성되어 있을 시 [+] 버튼을 눌러 추가 시킬 수 있음
B. Database 생성
1.[Database Configuration Asistant]를 실행하여 전역데이터베이스 이름, SID 등을 넣고 Database 생성
2. 데이버테이스 비밀번호는 대문자+소문자+숫자 의 조합으로 8자리 이상으로 구성해야 함
3. LISTENER_DBNET 선택 (A.단계에서 생성한 리스너 명 선택)
* [모든 리스너로 해당 데이터베이스 등록] 선택하면 모든 리스너로 부터 수신가능하게됨
* 시나리오는 특정 리스너로만 데이터베이스를 수신하고자 함
C. 서비스 이름 지정 확인 및 리스너에 수신 DB 추가
1. 정상적으로 DB가 생성되면 Oracle Net Manager 의 서비스 이름 지정 항목에 dbnet
이 생성됨 - 주소에 해당 리스너 포트가 등록되어 있는지 확인
[서비스 이름 지정] 항목은 'tnsnames.ora' 파일에 해당
DBNET =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbnet.XXX.com)
)
)
2. LISTENER_DBNET 을 선택 후 [데이터베이스 서비스] 에 dbnet 추가
..전역 데이터베이스 이름(dbnet.XXX.com),Oracle 홈 디렉토리, SID 등을 입력
[리스너] 항목은 'listener.ora' 파일에 해당)
ex) listener.ora
SID_LIST_LISTENER_DBNET =
(SID_DESC =
(GLOBAL_DBNAME = dbnet.XXX.com)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
(SID_NAME = dbnet)
)
)
LISTENER_DBNET =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
)
)
ADR_BASE_LISTENER_DBNET = D:\app\Administrator\product\11.2.0\dbhome_3\log
D. 서비스 및 기동여부 확인
1. [윈도우]-[관리도구]-[서비스] 에서 해당 리스너 서비스 기동 여부 확인
.. 서비스명에 리스너 이름이 보임
2. tnsping / sqlplus 접속 확인 -명령프롬프트([실행]-[cmd]입력)
> tnsping [서비스명]
>sqlplus [유저]/[패스워드]@[서비스명]
E. 방화벽 및 외부접속 확인
1. [윈도우]-[제어판]-[Windows 방화벽]을 실행 후 [설정변경]에서 [예외]에
1550 포트 추가
2. 외부에서 연결 할 경우 공유기등에서 포트포워드로 사설IP에 연결되도록 세팅
F. Oracle Client 에서 연결
1. 해당 Port가 열려 있는지 telnet등으로 Port를 체크
>telnet [host] [port]
* telnet 이 실행안되는 경우는
[제어판]-[프로그램 및 기능]-[Windows 기능 사용/사용 안함]-[기능]
에서 [기능 추가] 중 [Telnet 클라이언트]를 선택 해주면 됨(ex.Windows2008 Server)
2. Oracle Net Configuration Asistant 실행
3. [로컬 네트 서비스 이름 구성] 선택
4. [추가] 를 하여 서비스 이름 입력 (dbnet.XXX.com) - 전역 데이터베이스 이름
5. [TCP] 선택 후 1550 포트와 호스트 입력
* Listener 생성 순서는 크게 상관이 없다. 리스너를 만들고 나서 DB를 생성하고 진행할
수도 있고 데이터베이스 생성 후 리스너를 추가하여 진행 할 수도 있고 기존 DB를 위해
리스너를 만들고 [서비스 이름 지정]을 추가하여 작업하여도 무방하다.
대신 리스너를 먼저 만들고 DB 생성시 지정을 해주면 [윈도우 메뉴]-[관리도구]-[서비스]
에 자동으로 등록되어 진다. 그렇지 않은 경우에는
>lsnrctl start LISTENER_DBNET
과 같이 실행해야만 [윈도우 메뉴]-[관리도구]-[서비스] 에 나타나 기동된다.
* Listener 를 추가로 생성할 경우 [리스너] 항목 에서는 [데이터베이스] 항목 입력과
[서비스 이름 지정]에서는 [주소 구성] 항목에 추가된 Listener의 주소를 추가해 준다
ex) 1600 Port 리스너(LISTENER_1600) 추가후 서비스에 해당 주소 추가
tnsnames.ora 파일에
ADDRESS_LIST 항목이 추가되면서 1600포트에 대한 ADDRESS 부분이 추가됨
DBNET =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1600))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbnet.XXX.com)
)
)
ㅁ LSNRCTL 사용
1. 리스너 정보/상태
> lsnrctl
LSNRCTL> set current_listener [리스너명]
* 여러개의 Listener가 존재 할시 특정 Listener 지정
LSNRCTL> status
LSNRCTL> services
* >lsnrctl service [리스너명] 등 으로 사용해도 됨
LSNRCTL>show
LSNRCTL>show oracle_home -- oracle 홈 디렉토리
LSNRCTL>set log_status off -- log 정지
LSNRCTL>set log_status on -- log 작동
2. 리스너 재가동
>lsnrctl stop listener_dbnet
>lsnrctl start listener_dbnet
ㅁ etc.
LISTENER_DBNET 리스너에 수신주소(Port 1600) 추가시 listener.ora파일 변경예
추가 전
LISTENER_DBNET =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1550))
)
추가 후
LISTENER_DBNET =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1522))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.4)(PORT = 1600))
)
)
LISTENER_DBNET 리스너에 데이터베이스(icocoa) 추가시 listener.ora파일 변경예
추가 전
SID_LIST_LISTENER_DBNET =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dbnet.XXX.com)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
(SID_NAME = dbnet)
)
)
추가 후
SID_LIST_LISTENER_DBNET =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dbnet.XXX.com)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
(SID_NAME = dbnet)
)
(SID_DESC =
(GLOBAL_DBNAME = icocoa)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_3)
(SID_NAME = icocoa)
)
)
* 새로운 리스너를 추가하여 포트를 할당 받아 Protocol 이 틀린 사설 IP DB와 연결할
경우 오라클 설치 시 Oracle Connection Manager도 함께 설치해서 세팅
Oracle Net Services 11.2.0.1.0 -> Oracle Connection Manager 11.2.0.1.0
* ORA-12170: TNS 접속 시간 초과가 발생함
>> 윈도우 방화벽 확인
>> 공유기 또는 해당 네트워크의 방화벽 세팅 확인
>> 오라클 설치 폴더의 tnsnames.ora / listener.ora 파일의 ip정보가 'localhost'(127.0.0.1') 로 되어 있을 경우 서버의 IP로 바꿔줌 (host 파일, 도메인 IP등 확인)
ex)[오라클 설치폴더] D:\app\Administrator\product\11.2.0\dbhome_3\NETWORK\ADMIN
* ORA-12514: TNS 리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함
오류 문제: 대부분이 tnsnames.ora/listener.ora 파일의 정보가 맞지 않아
리스너가 제대로 동작하지 못하는 현상임
>> tnsnames.ora / listener.ora 파일의 정보 확인 IP/ServiceName 등등
>>리스너에 데이터 베이스 항목이 비어있을 경우 [oracle Net Manager] 실행하여 해당
[리스너] 선택 후 [데이터베이스] 항목을 추가한 후 리스너를 재가동
>> 접속에 계속 문제가 발생할 경우
서비스 이름지정에서 'Oracle8릴리스 8.0 호환 ID 사용' 을 선택하고 SID에 'DBNET'을 입력한 후
LISTENER_DBNET 의 전역 데이터베이스 이름을 'dbnet'으로 변경 한후 서버 및 리스너 재기동 후 테스트
* ORA-12541: TNS 리스너가 없습니다.
>> 데이터베이스를 생성 후 리스너 구성을 제대로 하지 않아 발생할수있음 - 리스너 구성 및 테스트 해줄것
>> 리스너 log(listener.log 파일)가 4기가 초과에도 발생 할 수 있음
ex) D:\app\Administrator\diag\tnslsnr\호스트\listener\trace\listener.log
LSNRCTL>set log_status off (log 정지)
LSNRCTL>set log_status on (log 작동)
또는
listener.ora 파일에 파라미터에 추가 후 리스너 재가동
LOGGING_LISTENER_DBNET = OFF
* LOGGING_[리스너명] = OFF
* [Oracle Net Manager] 실행 후 [리스너]에서 해당 리스너를 선택 한 후 우측
[일반 매개변수]를 선택하여 [로깅 및 추적]탭에서 [로깅이 사용으로 설정됨]을 체크해제하면 됨
tnsnames.ora / listener.ora 파일을 메모장 등에서 수정할 수도 있지만
[oracle Net Manager] 프로그램에서 수정 후 저장 시키면서 비교해 보면 도움 됨
'Database&WAS > Oracle' 카테고리의 다른 글
날짜 관련 쿼리 (0) | 2013.09.25 |
---|---|
제약조건 검사 시점 (0) | 2013.02.14 |
WFMLRSVCApp.ear 파일을 찾을 수 없는 오류 (0) | 2012.10.23 |
Oracle 11g Client 제거 - Windows 7(x64) (1) | 2011.09.28 |
[Oracle] COALESCE() 함수 (0) | 2011.06.27 |