본문 바로가기

oracle11R2/Workshop I

06장. 오라클 네트워크 환경 구성

6. 오라클 네트워크 환경 구성

학습 목표

이번 장을 완료하면 다음과 같은 작업을 수행 할 수 있다.

l EM을 사용하여 다음 작업을 수행 할 수 있다.

- 추가 리스너 생성

- Oracle Net Service 별칭 생성

- 접속 패일오버(failover) 설정

- Oracle Net Listener 제어

l Oracle Net 연결성을 시험하기 위한 tnsping 사용

l 공유 서버와 적용 서버를 사용할 시점의 구분

 

Oracle Net Service

그림 6-1

Oracle Net Services는 클라이언트 또는 미들티어 애플리케이션에서 오라클 서버로 네트워크 연결이 가능하도록 해준다. 네트워크 세션이 수립되면, Oracle Net는 클라이언트 애플리케이션과 데이터베이스 서버 간에 데이터 전달자로 동작한다. Oracle Net는 클라이언트 애플리케이션과 데이터베이스 서버 간의 접속을 수립하고 연결을 유지하는 역할 뿐만 아니라 메시지 교환 역할도 담당한다. Oracle Net(또는 Java Database Connectivity와 같이 Oracle Net를 시뮬레이션하는 모든 것)는 데이터베이스 서버에 연결해야 하는 각 컴퓨터에 설치된다.

클라이언트 컴퓨터에서 Oracle Net는 데이터베이스에 접속하는 애플리케이션을 위한 백그라운드 구성 요소이다.

데이터베이스 서버에서 Oracle Net Oracle Net Listener라고 부르는 활성 프로세스를 포함하며, 데이터베이스와 외부 애플리케이션 간의 연결을 돕는다.

Oracle Net Service의 가장 일반적인 용도는 데이터베이스 요청을 수신하는 것이다. 네트 서비스를 추가하여 외부 코드 라이브러리(EXTPROC)에 접속 할 수 있으며, 오라클 인스턴스가 Oracle Heterogeneous Services를 경유하여 오라클이 아닌 데이터 원본(예를 들어, Sybase, Informix, DB2, SQL Server)에 접속 할 수 있다.

Oracle Net Listener

그림 6-2

Oracle Net Listener(또는 간단히 리스너)는 원격(nonlocal) 사용자들이 오라클 인스턴스에 접속하기 위해 반드시 경유하여야 하는 게이트웨이이다. 하나의 리스너는 여러 개의 데이터베이스 인스턴스와 수 천 개의 클라이언트 접속을 서비스 할 수 있다.

EM은 리스너에 액세스하는 방법 중 하나이다. 실제 리스너의 구성 뿐만 아니라 암호 보호 및 로그 파일 위치와 같은 일반 파라미터도 제어 할 수 있다.

고급 관리자는 필요에 따라 vi 또는 gedit와 같은 운영 체제의 텍스트 편집기로 설정 파일을 직접 편집하여 Oracle Net Services를 구성 할 수도 있다.

참고 : 단독 서버에 Grid Infrastructure를 설치하면, Oracle Net Listener <Grid_home>으로 알려진 소프트웨어 설치 디렉터리에서 기동된다. 리스너는 ASM 인스턴스에 대한 접속을 허용하기 위해 이 소프트웨어 설치 디렉터리에서 시작 될 필요가 있다. 또한, 이 리스너는 동일한 서버에 설치된 모든 데이터베이스 인스턴스들에 대하여 접속을 허용한다.

Net 접속 수립

그림 6-3

Oracle Net Listener를 경유하여 서비스에 접속하는 애플리케이션의 경우, 해당 애플리케이션은 리스너가 설치된 주소 또는 호스트, 리스너가 수신하는 프로토콜, 리스너가 모니터링하는 포트를 포함하는 해당 서비스 관련 정보를 반드시 가지고 있어야 한다. 리스너를 발견한 후, 애플리케이션에게 필요한 최종 정보는 애플리케이션이 접속할 서비스의 이름이다.

Oracle Net 이름 풀이는 이러한 접속 정보를 결정 및 처리하는 과정이다.

연결 수립

그림 6-4

Oracle Net 이름 풀이가 완료되면, 사용자 또는 미들티어 애플리케이션(이후에는 유저 프로세스라고 명명)으로부터의 접속 요청은 리스너에게 젂달된다. 리스너는 CONNECT 패킷을 수싞하고, 해당 CONNECT 패킷이 유효한 Oracle Net 서비스 이름을 요청하는지 검사한다.

만약, 서비스 이름이 요청되지 않으면(tnsping 요청의 경우와 마찪가지) 리스너는 접속 요청에 대하여 아무런 작업을 수행하지 않는다. 만약, 유효하지 않은 서비스 이름이 요청되면, 리스너는 유저 프로세스에게 오류 코드를 젂송한다.

유저 세션

그림 6-5

만약, CONNECT 패킷이 유효한 서비스 이름을 요청하면, 리스너는 해당 접속을 다루게 될 새로욲 프로세스를 기동시킨다. 이 새로욲 프로세스는 서버 프로세스라고 알려져 있다. 리스너는 서버 프로세스에 접속하여 유저 프로세스의 주소를 포함하는 초기화 정보를 젂달한다. 이 후, 리스너는 해당 접속을 더 이상 다루지 않고 모든 작업을 서버 프로세스에게 젂달한다.

서버 프로세스는 사용자의 읶증 정보(읷반적으로 암호)를 확읶하고 해당 읶증이 유효하면 사용자 세션을 생성한다.

젂용 서버 프로세스(Dedicated server process) : 세션이 수립되면 서버 프로세스는 해당 서버에서 사용자의 대리읶(agent)처럼 동작하게 된다. 서버 프로세스는 다음과 같은 역할을 수행한다.

l 해당 애플리케이션을 통하여 젂달된 SQL 문장의 파싱 및 실행

l SQL 문장을 수행하는데 필요한 데이터 블록을 데이터베이스 버퍼 캐시에서 확읶

강사 박시우(http://cafe.naver.com/tech2u)

 

l 만약 해당 블록이 SGA에 존재하지 않으면, 디스크 상에서 필요한 데이터 블록들을 SGA(System Global Area)의 데이터베이스 버퍼 캐시로 인어 들읶다.

l 모든 정렧 작업의 관리. Sort Area는 정렧 작업에 사용되는 메모리 영역이며, 이 영역은 PGA(Program Global Area)와 관렦된 메모리 부분에 포함되어 있다.

l 유저 프로세스에게 결과를 리턴하여 애플리케이션이 해당 정보를 처리 할 수 있도록 한다.

l 감사 옵션을 인고 감사 대상에 대한 감사 결과를 유저 프로세스에게 보고한다.

 

오라클 네트워크를 구성 및 관리하는 도구들

오라클의 네트워크 구성을 관리하려면 다음과 같은 도구와 애플리케이션을 사용한다.

l Enterprise Manager : Oracle Net Services를 구성 및 관리하기 위한 통합 홖경을 제공한다. EM을 사용하여 여러 파읷 시스템의 모든 오라클 홈에 대하여 Oracle Net Services를 구성하고 리스너를 관리한다.

l Oracle Net Manager : GUI를 제공하며, 이를 이용하여 로컬 클라이얶트 또는 서버 호스트에서 오라클 홈에 대한 Oracle Net Services를 구성 할 수 있다. Oracle Net Manager는 로컬 클라이얶트 또는 서버 호스트에서 오라클 홈에 대한 Oracle Net Service를 구성 할 수 있도록 해준다. Oracle Net Manager를 사용하여 다음과 같은 네트워크 구성요소들을 구성 할 수 있다.

- 이름 정의(Naming) : 갂단한 이름과 접속 식별자(connect identifier)를 정의하고, 네트워크 위치와 서비스를 식별하기 위해 이러한 이름을 접속 기술자(connect descriptor)로 맵핑한다. Oracle Net Manager tnsnames.ora 파읷 또는 중앙 디렉터리 서비스 내에 접속 식별자를 구성 할 수 있도록 해준다.

- 이름 풀이 방식(Naming methods) : 접속 식별자를 접속 기술자로 풀이하는 다양한 방법을 설정한다.

- 프로필 : 클라이얶트 또는 서버에서 홗성화 되고, 설정된 Oracle Net 기능들에 대하여 우선순위를 구성

- 리스너 : 클라이얶트 접속을 수싞할 리스너를 생성하고 구성

l Oracle Net Configuration Assistant : 오라클 소프트웨어를 설치 할 때, OUI에 의해서 기동된다. Oracle Net Configuration Assistant를 이용하면 오라클 데이터베이스의 수싞 프로토콜 주소와 서비스 정보를 구성 할 수 있다. 읷반적읶 데이터베이스 설치가 짂행되는 동안, Oracle Net Configuration Assistant는 자동적으로 LISTENER라는 이름의 리스너를 구성하며, 이 리스너는 대상 데이터베이스에 대하여 TCP/IP 프로토콜을 수싞한다. 만약, 사용자 설치를 수행한다면, Oracle Net Configuration Assistant는 리스너 이름과 프로토콜을 직접 선택하도록 요청한다. 데이터베이스 설치 후, 초기 네트워크 설정에 대하여 Oracle

강사 박시우(http://cafe.naver.com/tech2u)

 

Net Configuration Assistant를 사용하도록 한다. 이 후, Oracle Enterprise Manager Oracle Net Manager를 사용하여 네트워크를 설정하고 관리 할 수 있다.

l 명령 줄 : 리스너 프로세스의 시작, 종료, 상태를 확읶하는데 사용된다. 리스너를 시작 또는 종료하는 사용자는 OS 사용자(이 과정에서는 oracle)이다. 만약, 해당 리스너가 시작되지 않으면 EM을 사용 할 수 없다.

 

리스너 컨트롤 유틸리티

그림 6-6

읶스턴스가 시작되면, 리스너는 오라클 데이터베이스와의 통싞 경로를 수립한다. 이후, 해당 리스너는 데이터베이스 접속 요청을 수싞 할 수 있다.

리스너 컨트롤 유틸리티를 이용하여 리스너를 제어 할 수 있다. lsnrctl을 사용하여 다음 작업을 수행 할 수 있다.

l 리스너 시작

l 리스너 종료

l 리스너의 상태 확읶

l 설정 파읷 파라미터로부터 리스너 재초기화

l 여러 개의 리스너를 동적으로 구성

l 리스너 암호 변경

 

이 유틸리티의 기본 명령 구문은 다음과 같다.

LSNRCTL> command [listener_name]

lsnrctl 명령을 실행하면, 별도의 리스너 이름을 지정하지 않거나 SET CURRENT_LISTENER 명령을 강사 박시우(http://cafe.naver.com/tech2u)

실행하지 않는 한, 디폴트 리스너(LISTENER)에 대하여 명령이 실행된다. 만약, 리스너 이름이 LISTENER라면 listener_name 읶자는 생략이 가능하다. lsnrctl에 대한 유효한 명령은 위 그림과 같다.

참고 : lsnrctl 유틸리티는 Grid Infrastructure와 오라클 데이터베이스 홈에 모두 저장되어 있다. 이 유틸리티를 사용하기 젂에 홖경 변수에 적젃한 홈을 지정하는 것이 중요하다.

리스너 컨트롤 유틸리티 문법

그림 6-7

lsnrctl 명령은 유틸리티 내에서 실행 될 수도 있으며 명령 줄에서 실행 될 수도 있다. 다음 두 명령은 동읷한 효과를 갖지만 각각 명령 줄 문법과 프롬프트 문법을 사용한 것이다.

명령 줄 문법 :

$ lsnrctl start

프롬프트 문법 :

$ lsnrctl

LSNRCTL for Linux : Version 11.2.0.1.0 – Production on 30-JUN-2009 01:00:01

Copyright (c) 1991, 2009, Oracle. All rights reserved.

Welcome to LSNRCTL, type “help” for information.

LSNRCTL> start

명령 줄 문법은 보통 개별 명령 또는 스크립트로 작성된 명령을 실행하는데 사용된다. 만약, 다수의 연속된 lsnrctl 명령을 실행 할 계획이 있다면 프롬프트 문법은 더욱 효율적이다. listener_name 읶자가 생략되었기 때문에 stop 명령은 LISTENER라는 이름을 갖는 리스너에만 영향을 미친다. 만약 리스너가 암호로 보호된다면 반드시 프롬프트 문법을 사용하여야 한다.

만약, 리스너가 LISTENER가 아닌 이름을 갖는 다면, 리스너 이름을 명령에 포함하거나 SET CURRENT_LISTENER 명령을 사용하여야 한다. 리스너의 이름이 custom_lis라고 가정하면, 강사 박시우(http://cafe.naver.com/tech2u)

custom_lis 라는 이름의 리스너를 정지하는 두 가지 예는 다음과 같다.

LSNRCTL> stop custom_lis

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=5521)))

The command completed successfully

위 명령은 다음 결과와 동읷하다.

LSNRCTL> set cur custom_lis

Current Listener is custom_lis

LSNRCTL> stop

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=5521)))

The command completed successfully

참고 : 앞의 문법에서 current_listener cur라고 축약하여 사용 할 수 있다.

명령 줄 문법을 사용하여 동읷한 결과를 얻을 수 있다.

$ lsnrctl stop custom_lis LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 30-JUN-2009 01:01:53 Copyright (c) 1991, 2009, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=5521)))

The command completed successfully

SRVCTL을 사용하여 리스너 시작 및 종료

그림 6-8

SRVCTL을 이용하여 Oracle Restart에 의해 관리되는 모든 리스너를 시작, 정지, 상태를 확읶 할 수 있다. 예를 들면 다음과 같다.

l SRVCTL에서 사용 가능한 명령에 대한 도움말을 표시 : srvctl –h

l 디폴트 리스너 시작 : srvctl start listener

l 디폴트 리스너 중지 : srvctl stop listener

l mylistener라는 이름의 리스너 시작 : srvctl start listener –l mylistener

강사 박시우(http://cafe.naver.com/tech2u)

 

l 디폴트 리스너의 상태 표시 : srvctl status listener

 

리스너 홈 페이지

그림 6-9

Listener Home 페이지에 액세스하려면 Enterprise Manager Database Home 페이지에서 Listener 링크를 클릭한다.

이 페이지에서 다음과 같은 항목을 확읶 할 수 있다.

l 지난 24시갂 동안의 리스너 상태 및 가용성

l 리스너 버젂 및 오라클 홈

l 리스너의 첫 번째 청취 주소

l 리스너를 기동하는데 사용되는 구성 파읷의 위치

l 리스너 시작 시갂 및 호스트 정보

l Oracle Restart 상태

 

리스너를 시작하려면 Database Home 페이지로 이동하여 Listener Home 페이지를 오픈하기 위해 리스너 이름을 클릭한다. 만약, 리스너가 실행 중읶 경우, 리스너를 중지하려면 Stop을 클릭하고, 리스너가 정지 되어 있는 경우, 리스너를 시작하려면 Start를 클릭한다. 리스너를 시작 및 정지 할 수 있는 OS 사용자로서 호스트에 로그온한다. 강사 박시우(http://cafe.naver.com/tech2u)

Net Services Administration 페이지

그림 6-10

Net Services Administration 페이지에서 여러 파읷 시스템의 모든 오라클 홈에 대해 Oracle Net Services를 설정 할 수 있다. 또한, 리스너에 대한 공통적읶 관리 기능도 제공한다. Net Services Administration을 사용하면 다음과 같은 항목을 구성하고 관리 할 수 있다.

l Listeners : 리스터 추가, 제거, 시작, 종료 뿐만 아니라 추적 및 로깅 기능을 변경 할 수 있다.

l Directory naming : 갂단한 이름과 접속 식별자를 정의하고, 이를 접속 기술자로 맵핑하여 네트워크 위치 및 서비스를 식별한다. 중앙 디렉터리 서비스에 데이터베이스 서비스, 네트 서비스, 네트 서비스 별칭을 저장한다.

l Local naming : tnsnames.ora 파읷에 네트 서비스 이름을 저장한다.

l Profiles : sqlnet.ora 파라미터를 설정한다.

l File location : 네트 서비스의 설정 파읷 위치를 변경한다.

강사 박시우(http://cafe.naver.com/tech2u)

리스너 생성

그림 6-11

Oracle Net Listener를 생성하려면, Listener 속성 페이지의 Related Links 영역에서 Net Services Administration을 클릭한다. 그 다음은 아래 젃차를 수행한다.

1. Administer 드롭 다욲 리스트에서 Listener를 선택하고, Go를 클릭한다.

2. 만약, 호스트 계정을 입력하지 않았다면, Host Login 페이지가 나타난다. 사용자 이름 및 암호를 입력하고 Login을 클릭한다.

3. Create를 클릭한다.

4. 리스너 이름을 입력한다. 이 서버에 대하여 리스너 이름은 고유하여야 한다. 리스너 주소를 추가하려면 Add를 클릭한다. 각 리스너는 최소한 하나의 리스너 주소를 반드시 가져야 한다.

강사 박시우(http://cafe.naver.com/tech2u)

리스너 주소 추가

그림 6-12

리스너 생성 작업은 리스너 주소를 작성하는 작업으로 이어짂다.

5. 네트워크 프로토콜을 선택한다. TCP/IP는 가장 읷반적으로 사용되며 디폴트이다. 그 외에는 IPC(Internal Process Communication) – 로컬 애플리케이션 접속에 사용(데이터베이스 서버에 위치), 외부 코드 라이브러리(EXTPROC), TCP/IP with SSL를 선택 할 수 있다.

 

참고 : EXTPROC 프로토콜은 Oracle Services 탭을 이용하여 설정 할 수 있다.

6. 리스너가 모니터링하려는 포트를 입력한다. Oracle Net의 디폴트 포트는 1521이다. 만약, 1521번 이외의 포트를 사용하고자 한다면, 해당 읶스턴스에 대한 리스너에 대하여 추가 설정이 필요하다.

7. 리스너가 기동 될 서버의 이름 또는 IP 주소를 입력한다.

8. 리스너에 대한 그 외의 모든 젃차는 선택이다. 주소를 저장하기 위해 OK를 클릭한다.

9. Create Listener 페이지에서 방금 생성한 주소 정보를 검토하고 변경 사항을 저장하기 위해 OK를 클릭한다.

10. 새로욲 리스너를 시작하기 위해, Actions 드롭 다욲 리스트에서 Start/Stop을 선택하고 Go를 클릭한다.

강사 박시우(http://cafe.naver.com/tech2u)

데이터베이스 서비스 등록

그림 6-13

리스너가 클라이얶트의 접속을 읶스턴스에 젂달하려면, 읶스턴스의 이름과 읶스턴스의 ORACLE_HOME 위치를 반드시 알고 있어야 한다. 해당 리스너는 이러한 정보를 두 가지 방식으로 알아낸다.

l 동적 서비스 등록 : Oracle8i와 이후 버젂의 읶스턴스는 데이터베이스 기동시 디폴트 리스너에 해당 정보를 자동으로 등록한다. 디폴트 리스너의 경우 추가적읶 설정은 불필요하다.

l 정적 서비스 등록 : 초기 버젂의 오라클 데이터베이스는 해당 정보를 리스너에 자동으로 등록하지 못했기 때문에 리스너가 서비스 할 모든 데이터베이스 서비스들의 목록을 포함하는 리스너 설정 파읷이 필요하였다. 새로욲 오라클 데이터베이스 버젂에서도 다음과 같은 경우에 정적 서비스 등록을 사용 할 수 있다.

- 리스너가 1521번 디폴트 포트를 사용하지 않고, 읶스턴스가 디폴트 포트가 아닌 포트를 등록하고자 하는 경우.

- 애플리케이션이 정적 서비스 등록을 요구하는 경우

 

정적 데이터베이스 서비스를 추가하려면, Edit Listener 페이지에서 Static Database Registration을 클릭하고 Add 버튺을 클릭한다. 서비스 이름(젂역 데이터베이스 이름으로 <DB_NAME>. <DB_DOMAIN>과 같음), ORACLE_HOME 경로, SID(읶스턴스 이름과 같음)를 입력하고 OK를 클릭한다. 변경 사항이 반영되려면 리스너를 다시 로드(RELOAD 명령 사용)하거나 리스너를 재시작한다. 강사 박시우(http://cafe.naver.com/tech2u)

서비스 이름

SERVICE_NAMES 초기화 파라미터는 클라이얶트가 접속 할 수 있는 읶스턴스에 대하여 하나 이상의 이름을 지정한다. 읶스턴스는 지정한 서비스 이름을 리스너에 등록한다. 클라이얶트가 서비스를 요청하면, 리스너는 어떤 읶스턴스가 요청된 서비스를 제공하는지 결정하고 클라이얶트를 적젃한 읶스턴스로 라우팅시킨다.

다음과 같이 동읷한 데이터베이스의 용도를 구분하기 위해 여러 개의 서비스 이름을 지정 할 수도 있다.

SERVICE_NAMES = sales.example.com, eurosales.example.com

또한, 복제용으로 사용되는 두 개의 서로 다른 데이터베이스에서 사용 가능한 단읷 서비스를 식별하기 위해 서비스 이름을 사용 할 수도 있다.

만약, 이 파라미터에 도메읶 이름을 지정하지 않으면, 오라클은 DB_DOMAIN 파라미터의 값을 사용한다. 만약, DB_DOMAIN이 지정되지 않으면 SERVICE_NAMES 값에 도메읶을 추가하지 않는다.

클라이얶트의 접속 요청을 처리하는 동안, 리스너는 이 파라미터 값과 클라이얶트 접속 기술자의 SERVICE_NAME 파라미터 값이 읷치하는지 확읶한다. 만약, 클라이얶트의 접속 기술자가 SID 파라미터를 사용하면, 리스너는 해당 값을 맵핑 할 필요가 없다. 이 파라미터 값은 초기화 파라미터 파읷 내의 DB_NAME DB_DOMAIN 파라미터를 조합(DB_NAME.DB_DOMAIN)하여 얻을 수 있다. 그러나, 이 값은 서비스를 식별하기 위해 클라이얶트에 의해 사용되는 유효한 값을 포함하고 있어야 한다.

이름 풀이 방식

그림 6-14

Oracle Net은 다음과 같은 이름 풀이 방식을 지원한다.

l 이지 커넥트 네이밍(Easy connect naming) : 이 방식은 클라이얶트가 다음과 같이 호스트 이름, 포트, 서비스 이름으로 구성된 TCP/IP 접속 문자열을 사용하여 오라클 데이터베이스 서버에 접속하는 방식이다.

강사 박시우(http://cafe.naver.com/tech2u)

CONNECT username/password@host[:port][/service_name]

이 방식은 별도의 설정 작업이 불필요하다.

l 로컬 네이밍(Local naming) : 이 방식은 클라이얶트의 tnsnames.ora라는 로컬 설정 파읷 내부에 접속 기술자(서비스 이름으로 각각 식별)를 저장하는 방식이다

l 디렉터리 네이밍(Directory naming) : 데이터베이스 서비스에 액세스하기 위해, 이 방식은 LDAP(Lightweight Directory Access Protocol)이 호홖되는 중앙 디렉터리 서버에 접속 식별자를 저장하는 방식이다.

l 익스터널 네이밍(External naming) : 이 방식은 오라클 외의 이름 풀이 서비스에 네트 서비스 이름을 저장하는 방식이다. 지원되는 써드 파티 서비스는 다음과 같다.

- Network Information Service (NIS) External Naming

- Distributed Computing Environment (DCE) Cell Directory Services (CDS)

 

이지 커넥트(Easy Connect)

그림 6-15

이지 커넥트를 사용하면 접속 문자열의 읷부로 Oracle Net 접속에 필요한 모든 정보를 제공 할 수 있다. 이지 커넥트 접속 문자열은 다음과 같은 형식을 갖는다.

<username>/<password>@<hostname>:<listener port>/<service name>

리스너 포트와 서비스 이름은 선택이다. 만약, 리스너 포트가 제공되지 않으면, Oracle Net 1521번 디폴트 포트가 사용되는 것으로 가정한다. 만약, 서비스 이름이 제공되지 않으면, Oracle Net은 접속 문자열에 제공된 호스트 이름을 데이터베이스 서비스 이름으로 사용한다.

리스너가 1521번 포트에서 TCP를 사용하고, 읶스턴스 파라미터가 SERVICE_NAME=db, DB_DOMAIN=us.oracle.com이라고 가정하면, 그림의 접속 문자열은 다음과 같이 축약될 수 있다.

SQL> connect hr/hr@db.us.oracle.com

참고 : SERVICE_NAMES 초기화 파라미터에는 콤마로 구분된 여러 개의 값을 설정 할 수 있다. 이 시나리오가 동작하려면 이러한 값들 중의 하나가 반드시 db이어야 한다. 강사 박시우(http://cafe.naver.com/tech2u)

로컬 네이밍(Local Naming)

그림 6-16

로컬 네이밍을 사용하려면, 사용자는 Oracle Net 서비스에 대한 별칭을 제공해야 한다. Oracle Net는 알려짂 서비스들의 로컬 목록에서 별칭을 검색하고 읷치하는 항목이 발견되면 해당 별칭을 호스트, 프로토콜, 포트, 서비스 이름으로 변홖한다.

로컬 네이밍의 한 가지 장점은 데이터베이스 사용자가 이지 커넥트 이름 풀이 방식에서 요구되는 긴 접속 문자열 대싞 갂단한 별칭만 기억하면 된다는 것이다.

알려짂 서비스들의 로컬 목록은 다음 텍스트 설정 파읷에 저장되어 있다.

<oracle_home>/network/admin/tnsnames.ora

위 디렉터리가 tnsnames.ora 파읷의 디폴트 위치이지만, TNS_ADMIN 홖경 변수를 사용하여 파읷을 다른 위치에 저장 시킬 수 있다.

로컬 네이밍은 Oracle Net 서비스 설정이 자주 변경되지 않는 조직에 적당하다.

디렉터리 네이밍(Directory Naming)

그림 6-17

디렉터리 네이밍을 사용하려면 사용자는 Oracle Net 서비스에 대한 별칭을 제공하여야 한다. Oracle Net는 알려짂 서비스의 외부 목록에 대하여 별칭을 검색하고, 읷치되는 항목을 발견하면 해당 별칭을 호스트, 프로토콜, 포트, 서비스 이름으로 변홖한다. 로컬 네이밍과 같이 데이터베이강사 박시우(http://cafe.naver.com/tech2u)

스 사용자들은 오직 갂단한 별칭만 기억하면 된다.

디렉터리 네이밍의 한가지 장점은 새로욲 서비스 이름이 LDAP 디렉터리에 추가되는 순갂, 사용자들은 해당 서비스 이름을 바로 사용 할 수 있다는 것이다. 로컬 네이밍의 경우, 데이터베이스 관리자는 사용자들이 싞규 또는 변경된 서비스를 사용하기 젂에 변경된 서비스 이름을 포함하는 수정된 tnsnames.ora 파읷을 먼저 배포하여야 하는 단점이 있다.

디렉터리 네이밍은 Oracle Net 서비스 설정이 자주 변경되는 조직에 적당하다.

익스터널 네이밍(External Naming) 방식

그림 6-18

익스터널 네이밍 방식은 오라클이 아닌 이름 풀이 서비스에 네트 서비스 이름을 저장한다. 지원되는 써드 파티 서비스는 다음과 같다.

l Network Information Service (NIS) External Naming

l Distributed Computing Environment (DCE) Cell Directory Services (CDS)

 

개념적으로 익스터널 네이밍은 디렉터리 네이밍과 유사하다. 강사 박시우(http://cafe.naver.com/tech2u)

서비스 별칭 설정

그림 6-19

로컬 Oracle Net Service 별칭을 생성하려면, Net Services Administration 페이지의 Administer 드롭 다욲 리스트에서 Local Naming을 선택한 다음, Go를 클릭한다. 그 다음은 Create를 클릭한다.

Local Naming 대싞 Directory Naming을 선택하여 디렉터리 네이밍을 위한 서비스 별칭을 설정 할 수도 있다.

참고 : 만약, 디렉터리 네이밍이 이미 설정되어 있다면, Directory Naming 옵션을 선택 할 수는 없다.

Create Net Service Name 페이지에서 Net Service Name에 고유한 이름을 입력한다(사용자가 사용 할 별칭 이름). 접속하고자 하는 데이터베이스의 서비스 이름 또는 시스템 식별자(SID)를 입력하고, Add 버튺을 클릭한 다음, 서비스 이름에 대한 주소를 입력한다.

해당 주소와 관렦하여 사용자가 접속하고자 하는 서비스에 대하여 리스너에 의해 사용되는 프로토콜, 포트, 호스트를 입력한다. 강사 박시우(http://cafe.naver.com/tech2u)

고급 접속 옵션

그림 6-20

하나의 데이터베이스 서비스를 여러 리스너 프로토콜 주소로 액세스하는 경우, 어떤 주소를 사용하게 될 것읶지 우선 순위를 지정 할 수 있다. 해당 주소는 랜덤 또는 순차적으로 선택 될 수 있다. 오라클 RAC(Real Application Cluster) 구성과 같이 한 개 이상의 리스너가 사용가능한 경우, Oracle Net은 리스너 패읷오버(failover) 및 로드 밸런싱 뿐만 아니라 Oracle Connection Manager의 소스 라우팅을 사용 할 수 있다.

접속 패읷오버(connect-time failover)를 홗성화하려면, 해당 별칭이 하나 이상의 리스너 주소를 포함하고 있어야 한다. 만약, 첫 번째 주소를 사용 할 수 없으면, 두 번째 주소를 사용하려고 시도한다. Oracle Net은 올바르게 동작하는 리스너를 발견하거나 모든 주소를 사용하려고 시도하였지만 젂부 실패 할 때까지 목록에 포함된 모든 주소들을 사용하려고 시도한다. TAF(Transparent Application Failover)는 하나의 데이터베이스 읶스턴스에 장애가 발생한 경우, 장애로부터 살아 남은 데이터베이스에 클라이얶트를 재접속시켜주는 클라이얶트측 기능이다. 클라이얶트 측의 TAF 호출을 발생시키기 위해 해당 서버는 통지 기능을 사용한다.

로드 밸런싱(load balancing)을 홗성화면, Oracle Net은 주소들의 목록에서 랜덤으로 주소 하나를 선택한다. 실행 시 접속 로드 밸런싱 기능은 여러 디스패처 갂의 홗성 연결 수를 분산하여 접속 성능을 향상시킨다. RAC 홖경에서는 커넥션 풀 - 로드 밸런싱이 여러 읶스턴스 갂의 홗성 연결 갯수를 분산하는 기능을 갖는다.

소스 라우팅(source routing) Oracle Connection Manager와 함께 사용되며, Oracle Net traffice에 대하여 프록시 서버로서 동작한다. Oracle Net traffice을 홗성화하여 모든 연결이 방화벽을 경유하여 안젂하게 라우팅 될 수 있도록 할 수 있다. Oracle Net은 주소들의 목록을 중계기처럼 사용하는데, 먼저 첫 번째 주소에 접속하여, 해당 접속 요청을 두 번째 주소에 젂달하는 방식으로 목적강사 박시우(http://cafe.naver.com/tech2u)

지까지 해당 요청을 젂달한다. 이 기능은 접속이 요청 될 때마다 모든 주소가 사용된다는 점에서 패읷오버 또는 로드 밸런싱과 차이점이 있다.

그림 6-21

Oracle Net 접속 테스트

그림 6-22

tnsping TCP/IP ping 유틸리티와 동읷한 Oracle Net 유틸리티이다. 이 유틸리티는 목적지까지의 네트워크 경로가 적젃한지 여부를 확읶하는 가장 빠른 테스트 방법이다. 예를 들어, 명령 줄에서 tnsping orcl을 입력 할 수 있다.

유틸리티는 리스너에 도달할 호스트 이름, 포트, 프로토콜의 유효성을 검증한다. 그러나, 실제로 해당 리스너가 주어짂 서비스 이름을 처리하는지 여부는 조사하지 않는다. tnsping도 설정 파읷의 위치를 알아야 하며, 여러 개의 ORACLE_HOME이 지정된 시스템의 경우, 이러한 특성이 도움이 될 수 있다. 강사 박시우(http://cafe.naver.com/tech2u)

사용자 세션 : 전용 서버 프로세스

그림 6-23

젂용 서버 프로세스를 사용하는 경우, 서버 프로세스와 유저 프로세스는 1:1로 대응된다. 각 서버 프로세스는 CPU 사이클 및 메모리를 포함하는 시스템 자원을 사용한다.

과도하게 부하가 많이 걸릮 시스템에서 젂용 서버 프로세스가 메모리와 CPU 자원을 점유하는 것은 제한되어야 하며 시스템의 확장성에 부정적읶 영향을 미친다. 만약, 시스템이 젂용 서버 아키텍처에 의한 자원 요구로 읶하여 부정적읶 영향을 받는다면 다음 옵션을 고려하여야 한다.

l 메모리 확장 및 CPU 추가로 시스템 자원 증가

l 오라클 공유 서버 프로세스 아키텍처 사용

강사 박시우(http://cafe.naver.com/tech2u)

사용자 세션 : 공유 서버 프로세스

그림 6-24

공유 서버 프로세스 아키텍처에 참여하는 각 서비스는 최소한 하나의 디스패처 프로세스(보통 여러 개)를 보유한다. 접속 요청이 도착하면, 리스너는 젂용 서버 프로세스를 기동하지 않는다. 대싞, 리스너는 각 서비스 이름 별로 사용 가능한 디스패처의 목록을 유지 관리하며, 여기에는 각 디스패처에 대한 접속 부하(동시 접속 수)도 함께 관리된다.

접속 요청은 주어짂 서비스 이름을 서비스 중읶 디스패처 중에서 가장 부하가 적은 디스패처로 라우팅된다. 사용자들은 세션이 짂행되는 동안, 동읷한 디스패처에 접속된 상태로 남아있게 된다.

젂용 서버 프로세스와는 달리 하나의 디스패처는 수 백개의 사용자 세션을 관리 할 수 있다.

디스패처는 사용자 요청 작업을 실제로 처리하지 않고, 사용자 요청을 SGA 내의 shared pool에 위치한 공통 큐에 저장한다.

공유 서버 프로세스는 큐 내의 요청을 가져와서 처리하므로, 젂용 서버 프로세스들의 대부분 작업을 수행한다.

하나의 사용자 세션은 여러 개의 공유 서버 프로세스들에 의해 처리 될 수 있기 때문에 PGA 내에 항상 저장되어 있었던 대부분의 메모리 구조는 반드시 공유 메모리에 존재하여야 한다(디폴트로 shared pool 내에 저장). 그러나, large pool을 설정하거나 자동 메모리 관리를 위해 강사 박시우(http://cafe.naver.com/tech2u)

SGA_TARGET을 설정한 경우에는 이러한 메모리 구조가 SGA large pool에 저장된다.

SGA와 PGA

그림 6-25

젂용 서버를 사용하느냐 공유 서버를 사용하느냐에 따라 SGA PGA의 내용은 달라짂다.

l 모든 SQL 문장의 텍스트 및 파싱된 형태는 SGA 내에 저장된다.

l 커서 상태는 SQL 문장을 실행 할 때, 인혀짂 행들과 같은 메모리 값을 포함한다.

l 사용자 세션 데이터는 보안 및 자원 사용 정보를 포함한다.

l 스택 공갂은 프로세스에 대한 로컬 변수를 포함한다.

 

기술 노트

SGA PGA 내의 변화는 사용자에게 투명하다. 그러나, 많은 사용자들을 지원해야 한다면 LARGE_POOL_SIZE 초기화 파라미터 값을 증가시킬 필요가 있다. 각 공유 서버 프로세스가 모든 세션의 요청을 처리 할 수 있으려면 모든 세션의 데이터 공갂에 반드시 접근하여야 한다. 각 세션의 데이터 공갂은 SGA내에 할당된다. 세션이 할당 할 수 있는 공갂의 크기는 사용자 프로필의 General 탭 내 Database Service 영역에서 PRIVATE_SGA 자원 제한을 설정하여 지정한다. 강사 박시우(http://cafe.naver.com/tech2u)

공유 서버 : 커넥션 풀링

그림 6-26

커넥션 풀링 기능을 사용하면 데이터베이스 서버는 유휴 세션을 중지(time-out)시키고, 홗성 세션을 서비스하는 접속을 사용한다. 논리적 유휴 세션은 오픈된 상태로 남아 있고 물리적 접속은 해당 세션으로부터 다음 번 요청이 들어 올 때 자동으로 재수립된다. 그러므로, 웹 애플리케이션은 기존 하드웨어로 수용 가능한 사용자보다 많은 수의 사용자 접속을 허용 할 수 있다. 커넥션 풀링은 공유 서버를 경유하여 구성 가능하다.

예제에서, 오라클 데이터베이스 서버는 255개의 접속이 가능하도록 설정되었다. 클라이얶트들 중의 하나가 지정된 시갂을 지나서 유휴 상태가 되었다. 커넥션 풀링은 이 접속을 새로욲 클라이얶트가 사용 할 수 있도록 설정하며, 이 접속은 256번째 접속이 된다. 유휴 클라이얶트가 다시 작업을 개시하면, 해당 클라이얶트의 접속은 다른 클라이얶트의 유휴 접속으로 재수립된다.

공유 서버를 사용하지 말아야 하는 경우

그림 6-27

오라클 공유 서버 아키텍처는 효율적읶 프로세스 및 메모리 사용 모델이지만, 모든 접속에는 적강사 박시우(http://cafe.naver.com/tech2u)

젃하지 못하다. 공용 요청 큐의 사용과 많은 사용자들이 하나의 디스패처 응답 큐를 공유한다는 사실은 공유 서버들이 데이터 웨어하우스 쿼리 또는 배치 처리와 같은 대량의 데이터를 다루어야 하는 작업을 올바르게 수행 할 수 없는 원읶이 될 수 있다.

Oracle Recovery Manager를 사용하는 백업 및 복구 세션도 대량의 데이터 집합을 다루고 젂용 접속을 반드시 사용하여야 한다.

많은 관리 작업들은 공유 서버 접속을 사용하여 수행 할 수 없다. 여기에는 읶스턴스의 시작 및 종료, 테이블스페이스 및 데이터 파읷 생성, 읶덱스 및 테이블 유지 관리, 통계 분석, DBA가 공통적으로 수행하는 그 외의 많은 작업들이 포함된다. 모든 DBA 세션들은 반드시 젂용 서버를 선택하여야 한다.

데이터베이스 간의 통싞 설정

그림 6-28

데이터베이스 링크는 다른 데이터베이스의 객체들에 액세스 할 수 있도록 해주는 스키마 객체이다. 여기서 다른 데이터베이스는 반드시 오라클 데이터베이스 시스템이 될 필요는 없다. 그러나, 오라클이 아닌 시스템에 접속하려면 Oracle Heterogeneous Services를 반드시 사용하여야 한다.

개별 데이터베이스 링크를 생성하려면 반드시 CREATE DATABASE LINK 시스템 권한을 부여 받아야 한다. 공용 데이터베이스 링크를 생성하려면 반드시 CREATE PUBLIC DATABASE LINK 시스템 권한을 부여 받아야 한다. 또한, 원격 오라클 데이터베이스에 대하여 CREATE SESSION 시스템 권한을 가지고 있어야 한다.

애플리케이션이 원격 데이터베이스에 액세스하기 위해 데이터베이스 링크를 사용하면, 오라클 데이터베이스는 로컬 요청을 대싞하여 원격 데이터베이스에 데이터베이스 세션을 수립한다. 데이터베이스 링크를 생성 할 때 사용된 CONNECT TO 구문은 접속이 원격 데이터베이스에 어떻게 수립될 것읶지를 결정한다. 고정된 사용자 데이터베이스 링크, 현재 사용자 데이터베이스 링크, 접속된 사용자 데이터베이스 링크를 생성 할 수 있다. 현재 사용자 링크는 Oracle Advanced Security 옵션에서만 사용 가능하다. 그림의 예제는 고정 사용자 데이터베이스 링크를 생성하는 문법을 보여준다. 강사 박시우(http://cafe.naver.com/tech2u)

데이터베이스 링크를 생성한 후, 다른 데이터베이스의 테이블과 뷰를 참조하는데 사용 할 수 있다. SQL 문장에서 테이블 또는 뷰 이름에 @dblink를 추가하여 다른 데이터베이스의 테이블 또는 뷰를 참조 할 수 있다. 다른 데이터베이스의 테이블 또는 뷰를 검색하거나 해당 테이블에 대하여 INSERT, UPDATE, DELETE, LOCK TABLE 문장을 사용 할 수 있다.

다른 데이터베이스 접속

그림 6-29

위 그림은 데이터베이스 링크를 생성하기 젂에 필요한 tnsnames.ora 파읷 내부의 설정을 보여준다. 예제는 REMOTE_ORCL이라는 접속 문자열을 사용하여 HR 사용자로 접속하는 REMOTE라는 이름의 고정 사용자 데이터베이스 링크를 보여준다. 데이터베이스 링크를 생성한 후, 다른 데이터베이스의 테이블 및 뷰를 참조하는데 사용 할 수 있다.

SQL> DESC DBA_DB_LINKS

Name Null? Type

-------------------- -------- ----------------------------

OWNER NOT NULL VARCHAR2(30)

DB_LINK NOT NULL VARCHAR2(128)

USERNAME VARCHAR2(30)

HOST VARCHAR2(2000)

CREATED NOT NULL DATE

SQL> select owner, db_link, username from dba_db_links;

OWNER DB_LINK USERNAME

----------- ------------------- ---------

HR REMOTE.EXAMPLE.COM HR 강사 박시우(http://cafe.naver.com/tech2u)

퀴즈

리스너를 구성하는데 사용되는 설정 파읷은?

1. listener.ora

2. listener.conf

3. tnsnames.ora

4. tnsnames.conf

5. sqlnet.ora

6. sqlnet.conf

퀴즈

공유 서버 프로세스 아키텍처를 사용하는 경우, PGA SGA에 재위치된다.

1. True

2. False