Summary
1. Oracle Client/Server Architecture 환경에서 공유 데이터는 모든 컴퓨터가 아닌 서버에 저장된다. 따라서 Client Application은 SQL 문장을 이용하여 데이터베이스의 요구를 서버에 보낸다. 서버에 전달되면 SQL 문장은 서버에 의해 처리된다. 그리고 결과는 Client Application에 반환된다. 이때 네트워크 부하는 최소한으로 유지되어야 한다. 왜냐하면, 요청과 그 결과가 네트워크를 통해 전송되기 때문이다.
2. Oracle Client/Server Architecture 환경에서 필요하다면 Oracle은 여러분이 시스템이 성장하는 만큼 확장될 수 있다. 여러분은 네트워크를 통해 데이터베이스의 부하를 처리하기 위해 다수의 서버를 추가할 수 있다. (수평 확장) 혹은 대형 시스템의 성능 향상을 위해 minicomputer나 mainframe에 Oracle을 이전할 수 있다. (수직 확장)
3. Multitier Architecture 환경에서 Application Server는 Client를 위한 데이터의 접근을 제공한다. 이는 Client와 하나 혹은 그 이상의 추가적인 보안을 제공하는 Database Server와의 인터페이스로 고려된다. Application Server는 Client를 위한 데이터 처리를 수행함으로써 Database Server로부터의 부하를 줄인다. Application Server의 권한 설정을 통해 Client의 불필요하거나 원하지 않는 동작이 제한된다.
4. Oracle 데이터베이스 서버에 접속하기 위해서는 서버는 적어도 하나 이상의 listener가 설정되어 있어야 한다. 데이터베이스를 설치할 때 listener의 설정이 이루어지는 것이 일반적이나 Oracle Net Configuration Assistant를 통해 Listener를 생성할 수도 있다.
5. 로컬 네트 서비스 이름을 구성할 때는 접속하고자 하는 원격 데이터베이스 서버의 호스트 이름(해당 호스트의 IP), 데이터베이스 이름(데이터베이스 서비스 이름),그리고 접속 가능한 계정과 패스워드를 데이터베이스 관리자에게 확인해야 한다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Client / Server Architecture
Oracle 데이터베이스 시스템 환경은 데이터베이스 애플리케이션과 데이터베이스 두 부분으로 나눌 수 있다. Front End의 Client 부분과 Back End의 Server 부분이 그것이다. 이를 Client / Server Architecture라 한다.
이때 클라이언트는 데이터베이스 애플리케이션을 운영하며 데이터베이스에 접근하거나, 마우스, 키보드, 스크린을 통해 사용자와 상호 작용을 한다. 서버는 Oracle 소프트웨어를 운영하며, Oracle 데이터베이스의 동시 접속이나 데이터의 공유를 처리한다.
Oracle Server / Client 구조 A
클라이언트와 서버가 서로 다른 컴퓨터에 위치하며, 이들이 네트워크로 서로 연결되어 있다. 서버와 오라클 DBMS의 클라이언트는 오라클 네트워크 인터페이스인 Oracle Net Service를 통하여 서로 통신한다.
Oracle Server / Client 구조 B
단일 컴퓨터가 하나 이상의 프로세스를 가지며, 서로 다른 프로세스들이 Client Application의 실행을 각각 처리하고 있음을 보여준다. 만약 클라이언트와 오라클이 하나의 컴퓨터에서 운영된다면 더 높은 효율을 얻기 위해 네트워크를 통해 위와 같이 클라이언트 부분과 서버 부분으로 나누어 운영하는 것이 바람직하다.
Oracle Client / Server Architecture 의 장점
- Client Application은 어떤 데이터 처리를 수행할 책임이 없다. Client Application은 사용자로부터 입력을 요구하고, 서버로부터 데이터를 요구한다. 그리고 데이터를 표현한다.
- Client Application은 데이터의 물리적 위치와는 독립적이다. 데이터가 다른 데이터베이스 서버로 이동되더라도 Application은 수정 없이 계속하여 동작한다.
- Client Workstations이나 Terminal은 그래픽이나 마우스의 지원을 제공함으로써 데이터의 표현을 최적화하며, Server는 대용량의 메모리와 저장 공간을 가짐으로써 데이터 처리와 저장을 최적화한다.
- 필요하다면 Oracle은 여러분의 시스템이 성장하는 만큼 확장될 수 있다. 여러분은 네트워크를 통해 데이터베이스의 부하를 처리하기 위해 다수의 서버를 추가할 수 있다. (수형 확장) 혹은 대형 시스템의 성능 향상을 위해 minicomputer나 mainframe에 오라클을 이전할 수 있다. (수직 확장)
- 네트워크 환경에서 공유 데이터는 모든 컴퓨터가 아닌 서버에 저장된다. 따라서 Client Application은 SQL 문장을 이용하여 DB의 요구를 서버에 보낸다. 서버에 전달되면 SQL 문장은 처리되고 결과를 Client Application에 반환한다. 이때 네트워크 부하는 최소한으로 유지되어야 한다. 왜냐하면, 요청과 그 결과가 네트워크를 통해 전송되기 떄문이다.
Multitier Architecture
구성요소
Client
Client는 Web Brower를 이용한 End User의 처리를 생각해 볼 수 있다. Multitier Architecture에서 Client는 하나 혹은 그 이상의 Application Server를 통해 Database Sesrver에 연결된다.
Application Server
Application Server는 Client를 위한 데이터의 접근을 제공한다. Client와 하나 혹은 그 이상의 추가적인 보안을 제공하는 Database Server와의 인터페이스로 생각하자. Application Server는 Client를 위한 데이터 처리를 수행함으로써 Database Server로부터의 부하를 줄인다. Application Server의 권한 설정을 통해 Client의 불필요하거나 원하지 않는 동작이 제한된다.
Database Server
Database Server는 Application Server에게 데이터를 제공한다. Oracle Database Server는 Application Server에 의해 수행되는 동작을 감시할 수 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Net Service
오라클의 네트워크는 클라이언트의 요청에 대해 서버 측(Server Side)의 Listener 프로세스(Listener Process)로부터 시작을 한다. -> Listener Process는 대기상태로 있다가 클라이언트 프로세스가 데이터베이스 Instance로 접속을 요청하면, -> 서버 프로세스를 시작시켜 클라이언트 프로세스의 요청을 처리한다. 클라이언트의 접속 요청을 리스너로부터 받은 서버 프로세스는 클라이언트 프로세스와 통신을 시작하고, 데이터베이스 리스너는 다시 대기 상태로 돌아간다.
Oracle 10g에서는 네트워크를 설정할 수 있는 GUI 툴인 Net Configuration Assistant(NETCA)와 Net Manager(NETMGR)를 제공하여 각각 서버와 클라이언트의 통신 환경을 구축한다.
Oracle Net Configuration Assistant(NETCA)는 데이터베이스 설치 이후 기본적인 네트워크 구성 요소를 설치한다. NETCA를 이용하여 서버와 클라이언트의 통신 환경을 구축해보자. 아래 설정은 데이터베이스 서버 측의 Listener 설정과 원격 데이터베이스 서버로의 접속하기 위한 클라이언트 설정 부분으로 구성되어 있다.
Listener 구성을 위한 설정
시작 -> 프로그램 -> OracleOraDb10g_home1 -> 구성 및 이전 툴(Configuration and Migration Tools) -> Net Configuration Assistant를 선택한다.
오라클 DB서버에 접속하기 위해서는 서버에 적어도 하나 이상의 리스너가 설정되어 있어야 한다. DB를 설치할 때 리스너의 설정이 이루어지는 것이 일반적이나 Oracle Configuration Assistant를 통해 Listener를 생성할 수도 있다.
아래 예는 Listener의 구성이 필요한 경우 설정 방법에 대해 설명하고 있다.
Listemer 구성 선택 -> 리스너를 추가하거나 변경, 삭제 및 이미 구성된 리스너를 테스트할 수 있다. 현재는 설정된 리스너가 없기 떄문에 추가만이 가능하다. -> 리스너를 식별할 수 있는 이름을 입력한다. 이 이름은 138자를 넘지 않아야 한다. 리스너는 Client Application 접속 요구를 처리하는 프로세스이다. 최초 리스너의 이름은 'LISTENER'로 기본 설정된다. ->
리스너는 listener.ora 파일에 명시된 프로토콜로 클라이언트의 요구를 받는다. 클라이언트가 보내는 요구는 동일한 프로토콜로 설정된다. -> TCP/IP는 포트 번호에 의해 리스너의 프로토콜을 인식한다. 사용하고자 하는 포트 번호를 선택한다. 오라클이 제공하는 기본 포트 번호는 1521번이다. 만약 이 포트 번호를 이미 사용하고 있다면 다른 번호로 설정해야한다. -> 추가할 리스너가 없으면 '아니오'를 선택한다. -> 리스너 구성이 완료되었다.
\oracle\product\10.2.0\Db_1\NETWORK\ADMIN에 있는 listener.ora 파일을 보면 지금까지 수행했던 리스너 설정 사항을 아래와 같이 확인할 수 있다.
# listener.ora Network Configuration File : D :\oracle\product\10.2.0
\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
# 시스템 네트워크 카드에 프로토콜, 네트워크 주소, 포트를 설정한다.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
# 리스너가 접속할 데이터베이스 인스턴스 환경을 설정한다.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TPC(HOST = happy-cat)(PORT = 1521))
)
)
위 리스너 설정을 보면 하나의 리스너 설정은 LISTENER절과 SID_LIST_LISTENER절로 설정됨을 알 수 있다.
처음의 LISTENER절은 Listener로 명명된 이름을 그대로 사용하여 시스템의 통신 포트와 호스트의 설정을 담당하며, SID_LIST_LISTENER절은 데이터베이스를 연결할 떄 필요한 해당 데이터베이스의 정보를 연결한다.
만약 여러분이 'MYLISTENER'라고 Listener 이름을 정의하였다면 각각 MYLISTENER, SID_LIST_MYLISTENER와 같은 형식으로 구성된다. 여러분의 시스템에 네트워크 카드의 여분이 존재한다면 Listener를 물리적으로 복수 개로 설정할 수 있고, 논리적으로 시스템의 특정 포트를 열어서 그 포트에 Listner를 할당하여 하나의 시스템에 복수 개의 Listner를 구성하는 것이 가능하다.
시작 -> 설정 -> 제어판 -> 관리도구 -> 서비스를 보면 여러분의 시스템에 설정된 리스너 서비스의 상태를 확인할 수 있다. 윈도우에서는 서비스에 등록된 리스너 서비스를 시작함으로써 Oracle Net Service를 통해 Client에서 원격 Database Server로의 접속이 가능하다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
원격 데이터베이스 서버에 접속하기 위한 방법
로컬 네트 서비스 이름 구성 방법
Oracle Client에서 원격 데이터베이스 서버에 접속하기 위한 설정을 알아보자.
로컬 네트 서비스 이름을 구성하면 tnsnames.ora 파일에 저장되어 있는 연결 기술자(Connect Descriptor)의 연결을 제어할 수 있다. -> Net Service 이름을 추가하거나 재구성, 삭제, 이름 변경 및 테스트를 할 수 있다. -> 데이터베이스 서비스(데이터베이스 이름)를 식별할 수 있는 이름을 입력한다. 서비스 이름은 대개 전역 데이터베이스 이름으로 DB_NAME과 DB_DOMAIN의 결합으로 구성된다. 데이터베이스 서비스는 데이터베이스를 생성하는 과정에서 정으된다. -> 클라이언트가 접근할 데이터베이스에서 사용될 프로토콜을 선택하여야 한다. 만약 선택된 프로토콜의 설정을 변경하고자 한다면 Oracle Net Manager를 사용하여 리스너 설정을 변경해야한다. -> 리스너가 위치한 컴퓨터의 HOST 이름을 입력한다. 1521번 기본 포트 번호를 사용하며, 이 포트 번호가 사용되고 있다면 다른 번호를 선택하면 된다. -> 정상적으로 원격 데이터베이스에 접속이 되는지 테스트를 수행한다. -> 원격 데이터베이스 서버에 접속하기 위한 지금까지의 네트 서비스 설정을 'ora10g'라는 이름으로 정의한다 -> 다른 원격 DB로 접속을 원하나요? 여러분이 다른 DB 서버에 접속하고자 한다면 이와 같은 방법으로 네트 서비스 이름을 설정해주자. -> Net Service 이름이 성공적으로 구성되었다.
네트 서비스 이름의 구성 내용은 \oracle\product\10.2.0\db_1\NETWORK\ADMIN 의 tnsnames.ora 파일을 확인하면된다.
# tnsnames.ora Network Configuration File : D:\oracle\product\10.2.0
\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORA10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.57.xxx.xxx)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = R0)
)
)
접속 테스트에 실패했을 떄 조치 방법
CASE 1. 로그인 사용자 SYSTEM과 패스워드 MANAGER가 유효하지 않은 경우
접속 중...ORA-01017 : invalid username/password; logon denied 테스트를 실패했습니다.
이 경우 로그인 변경을 클릭하여 다른 사용자로 접속을 시도해보자.
CASE 2. 프로토콜 정보가 Listener의 정보와 일치하지 않은 경우
접속 중...ORA-12514 : TNS: listener does not currently know of
service requested in connect descriptor
테스트를 실패했습니다.
[뒤로(B)] 버튼을 클릭하여 프로토콜 정보를 다시 확인하자.
CASE 3. Listener가 현재 동작하지 않은 경우이다.
접속 중...ORA-12541 : TNS:no listener
테스트를 실패했습니다.
Listener 서비스를 시작하자.
CASE 4. 접속하고자 하는 데이터베이스 서버가 현재 동작하지 않은 경우
접속 중...ORA-12541 : TNS:no listener
테스트를 실패했습니다.
데이터베이스 서비스를 시작하자.
'DB > Oracle' 카테고리의 다른 글
[Oracle] Chapter 3. 캐시와 공유메모리 (0) | 2022.10.23 |
---|---|
[Oracle] Oracle Data Pump 와 SQL*Loader (0) | 2022.10.17 |
[Oracle] Chapter 2. 오라클의 여러 프로세스 (0) | 2022.10.10 |
[Oracle] Chapter 1. I/O와 디스크의 관계 (0) | 2022.10.09 |
[Oracle] Oracle Server 내부로의 여행_Server Architecture (0) | 2022.09.27 |