오라클에 접속하기
Dedicated Server
- 접속하면 새로운 프로세스 생성, 세션의 수명이 다할 때 까지 서버 프로세스 하나가 전용으로 연결됨 (1:1)
- 서버 프로세스는 인스턴스의 일부분은 아님
- 클라이언트(SQL*Plus) 프로세스가 네트워크 경유하여 서버 프로세스를 통해 직접 통신
- 서버 프로세스는 SQL을 접수/실행 처리 (필요시 데이터 파일을 읽고, 결과 데이터를 캐시에 저장)
데모
$ ps -aef | grep oracle$ORACLE_SID
oracle 19601 19331 0 11:13 pts/1 00:00:00 grep oracleora11g
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Sep 25 11:13:32 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> !ps -aef | grep oracle$ORACLE_SID
oracle 19603 19602 0 11:13 ? 00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 19606 19604 0 11:13 pts/1 00:00:00 grep oracleora11g
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
$ ps -aef | grep oracle$ORACLE_SID
oracle 19614 19331 0 11:17 pts/1 00:00:00 grep oracleora11g
Shared Server
- 다수 사용자를 위한 공유 프로세스들의 풀(pool)을 사용하는 단순 접속 풀링 구조 (N:1)
- 10,000 개 세션을 위해 10,000 개의 전용 서버를 갖는 대신 모든 세션이 공유할 수 있는 작은 비율의 서버를 유지 (dedicated server 구조 보다 훨씬 더 많은 사용자 접속 가능)
- 일반적으로 shared server 프로세스는 데이터베이스와 함께 기동
작동 순서
- 클라이언트(SQL*Plus) 프로세스가 네트워크 경유하여 dispatcher 프로세스와 통신 (요청)
- dispatcher 프로세스는 클라이언트 요청을 SGA 내 request queue 에 넣음
- busy 하지 않은 shared server 프로세스는 이 요청을 꺼내서 수행하고 response queue 에 넣음
- dispatcher 프로세스는 response queue 에서 결과를 확인하고 클라이언트에 전달
- 개발자 입장에서 shared server 커넥션과 dedicated server 커넥션 사이에 개념적인 차이는 없다
TCP/IP를 이용하여 접속하는 기법
데모
-- earth : TNS(Transparent Network Substrate) 서비스 이름 / tnsnames.ora
$ sqlplus scott/tiger@earth
SQL*Plus: Release 11.2.0.3.0 Production on Thu Sep 25 11:58:16 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
-- TNS 접속 문자열, 호스트 이름, 포트, 서비스 이름등 정의
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /sw/oracle/app/oracle/product/11.2.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
EARTH =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = pdbmon1x)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = EARTH)
)
)
- earth 는 TNS 외에도 OID(Oracle Internet Directory)를 이용하여 해석될 수도 있음 (DNS와 같은 분산 LDAP 서버)
- 서버는 리스너 프로세스가 1521 포트에 들어오는 접속 요청을 처리 (허락/거부)
- Dedicated Server 프로세스 생성 후 클라이언트 커넥션 상속
- 사용 가능한 Dispatcher 프로세스에 접속할 수 있는 정보를 클라이언트에 전달 (OR Dispatcher 프로세스에 연결 요청을 넘김) 하고, 클라이언트는 바로 Dispatcher에 직접 접속한다 (TODO)
정리
- 인스턴스, 데이터베이스 용어 정의
- dedicated/shared server 커넥션
이미지 참조