오라클에 접속하기

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 프로세스는 데이터베이스와 함께 기동


작동 순서
  1. 클라이언트(SQL*Plus) 프로세스가 네트워크 경유하여 dispatcher 프로세스와 통신 (요청)
  2. dispatcher 프로세스는 클라이언트 요청을 SGA 내 request queue 에 넣음
  3. busy 하지 않은 shared server 프로세스는 이 요청을 꺼내서 수행하고 response queue 에 넣음
  4. 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 커넥션



이미지 참조