오라클 SID 개념 - olakeul SID gaenyeom

ORACLE

오라클을 서버를 구축하고 서버 관리를 하면서

Service는 왜 올리는 것이며, Instance는 왜 올리는 것인지에 대해서 정확한 개념을 알 수가 없었습니다.

일반적으로 로컬에서 사용하는 테스트 환경에서는 한 Instance에 한 Service가 올라가는것이라 잘 이해가 되지 않았습니다. 하지만 클라우드 환경이나 서비스 업체에서는 다양한 Sid를 사용하여 DB를 관리하는 경우가 있습니다. 이럴 때 정확한 개념 이해가 필요하여 이 부분에 있어서 포스팅을 하게 되었습니다.

Instance는 Oracle에서는 sid라고 명명합니다.

예를들어 sid1, sid2라고 명명된 2가지 sid가 있다고 한다면 하나의 Service에서 2개의 Instance를 운영하고 있다고 생각하시면 됩니다.

비교할 수 있는 예시로는, Web서버에서 우리는 여러 대의 Was를 운영하는 것처럼 이해하시면 됩니다.

Web서버가 내려가면 Was가 기동이 안될 것 입니다. 하지만 #1 Was가 Stop 된다 하더라도 #2 Was에서 영향이 가지는 않을 것입니다.

Service = Web Server

Instance = Was

라고 생각하시면 이해하기 편하실 겁니다.

일반적인 테스트 환경이나 소규모의 경우 한개의 DB서버에 한개의 인스턴스만 사용한다.

이런 환경에서는 SID와 Service Name을 구분할 필요가 없었던것이다.

단순히 구분짓자면 이렇게 말할수 있다.

SID = DB 하나의 인스턴스

Service Name = 여러개의 인스턴스를 모아 하나의 서버 혹은 시스템을 구성한것

쉽게 예를 들어보자.

서버 한대에 인스턴스를 여러개 생성하여 orcl1, orcl2 로 각각 생성했다고 하자.

각각의 인스턴스는 orcl1, orcl2 라는 SID를 갖게 된다.

해당 서버에서 두개의 인스턴스를 묶어 사용할경우, orcl 이라는 Service Name을 갖을수 있다.

이외에도 서버 두대에 설치하여 각각 미러링 처리하여 동일한 서버인것 처럼 활용할경우

각각의 서버는 서로다른 SID를 갖게 되지만 Service Name을 동일하게 하여 같은 서버 처럼 활용할수 있다.

1. 오라클 데이타베이스명 확인하는 방법

SELECT NAME, DB_UNIQUE_NAME FROM v$database;

2. 오라클 SID 확인하는 방법

SELECT INSTANCE FROM v$thread;

SYS@XE> show parameter service_name; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string XE

SID는 INSTANCE의 유니크한 이름입니다.

SERVICE NAME은 데이터베이스에 원격으로 접속할때 사용되는 TNS alias입니다. SERVICE NAME은 클라이언트의 tnsnames.ora 파일에 기록됩니다. SID와 동일할 수 있으며 원하는 다른 이름을 지정할 수 있습니다.

SERVICE_NAME은 데이터베이스가 리스너에 자신을 등록할 수 있는 Oracle 8i부터 사용되는 기능입니다.

이런 방식으로 데이터베이스가 리스너에 등록된 경우 tnsnames.ora에서 SERVICE_NAME 파라미터를 사용할 수 있습니다. 그렇지 않으면 tnsnames.ora에서 SID를 사용합니다.

RAC가 있는 경우 인스턴스마다 다른 SERVICE_NAME을 갖게 됩니다.

SERVICE_NAME은 인스턴스가 연결되는 데이터베이스 서비스의 이름을 하나 이상 지정합니다. 동일한 데이터베이스의 서로 다른 용도를 구별하기 위해 여러 서비스 이름을 지정할 수 있습니다.

SERVICE NAMES 찾는법

오라큰 SERVICE NAME은 인스턴스 이름과 비슷합니다.

만약 인스턴스 이름이 prdserv이면 SERVICE NAME은 oracleserviceprdserv라고 가정합니다.

SERVICE NAME 확인쿼리

방법1 select value from v$parameter where name like '%service_name%'; VALUE ---------------------------------------------------------------------------------------------------- XE 1 row selected. 방법2 show parameter service_name; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string XE 방법3 select sys_context('userenv','service_name') from dual; SYS_CONTEXT('USERENV','SERVICE_NAME') ---------------------------------------------------------------------------------------------------- XE 1 row selected.

 SID 확인 쿼리

OS에서 확인 ora_pmon_SID ps -ef |grep pmon oracle 4371 1 0 Jul01 ? 00:01:27 xe_pmon_XE 쿼리로 확인 select instance_name from v$instance; INSTANCE_NAME ---------------- XE SELECT instance FROM v$thread; INSTANCE -------------------------------------------------------------------------------- XE RAC의 경우 SQL> SELECT instance FROM v$thread; INSTANCE -------------------------------------------------------------------------------- MEPP1 MEPP2 SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- MEPP2

출처 : //www.stechies.com/difference-between-oracle-sids-and-oracle-service-names/

Oracle SIDs vs. Oracle SERVICE NAMES

What is the differences between Oracle SIDs and Oracle SERVICE NAMES. Oracle SID is the unique name that uniquely identifies your instance/database where as Service name is the TNS alias. SERVICE_NAME is the new feature from oracle 8i on wards in which dat

www.stechies.com

SID와 Service Name의 차이는 아래와 같다.

  • SID : DB 하나의 인스턴스
  • Service Name : 여러 개의 인스턴스를 모아 하나의 서버 혹은 시스템을 구성한 것

설명

일반적인 경우 데이터베이스가 인스턴스 하나만으로 구성되어 있다면 " 데이터베이스명 = SID " 가 된다.

하지만 RAC 구성일 경우 하나의 서버 내에 두 개 이상의 인스턴스로 구성되어 있으므로 아래와 같이 SID가 서로 다를 수 있다.

SQL> SELECT NAME, DB_UNIQUE_NAME FROM V$DATABASE; NAME DB_UNIQUE_NAME ------------------ ------------------------------------------------------------ ORCL ORCL SQL> SELECT INSTANCE FROM V$THREAD; INSTANCE -------------------------------------------------------------------------------- ORCL1 ORCL2

위 화면처럼 데이터베이스명은 ORCL 이지만, 인스턴스명은 ORCL1과 ORCL2로 이름이 다르다. 

오라클 데이터베이스명을 확인하는 방법

SELECT NAME, DB_UNIQUE_NAME FROM v$database;

오라클 SID를 확인하는 방법

SELECT instance FROM v$thread;

※ 보통 JDBC로 접속할 때 URL 정보 작성하는 방법

JDBC에서 thin 드라이버로 오라클 접속할 시 SID를 알아야 한다.

따라서 SID는 위와 같이(오라클 SID 확인하는 방법) 확인해서 접속 정보를 입력하면 된다.

url=jdbc:oracle:thin:@ip주소:포트:SID (url=jdbc:oracle:thin:@192.168.20.1:1521:ORCL)

Toplist

최신 우편물

태그