Oracle SID 확인 쿼리 - Oracle SID hwag-in kwoli

SID 와 Service name 의 차이는 무엇일까요?

오라클 데이터베이스를 운영하면서 SID와 Service name은 거의 구분하지 않고 사용해 왔습니다. 보통 일반적인 테스트 환경이나 소규모 사이트의 경우 데이타베이스가 하나만으로 구성되어 있고 이런 경우라면 SID와 service name을 구분할 필요가 없기 때문에 데이터베이스 이름(service name)이 SID가 됩니다. 하지만 RAC 로 구성하여 데이타베이스 두개가 동시 가동되는 경우라면 이 SID 가 서로 다를 수 있기 때문에 개념을 인지하고 중복 확인을 진행 하는게 좋을 것 같습니다. ( Service name이 더 큰 개념으로 SID 2개를 합쳐서 Service name으로 서비스가 가능합니다.)

오라클 클라이언트 프로그램 연결 로직 설명입니다.

DB에 접속하는 클라이언트 프로그램의 경우에는 접속하고자 하는 오라클 인스턴스 정보를 필요로 합니다. 프로그램에 접속하는데 필요한 정보로는 서버의IP 오라클SID 접속 프로토콜 같은 정보가 필요합니다. 이 정보를 하나로 묶어서 서비스명으로 대표하고, 이 서비스명으로 클라이언트 프로그램이 서버에 접속하는데 사용합니다. 해당 정보는 클라이언트 서버의 tnsnames.ora 라는 파일에 기재되어 있습니다.

1. 오라클 데이타베이스에 SQLPLUS로 접속합니다.

오라클 클라이언트가 설치된 서버에서 윈도우와 R 키를 눌러 실행창을 띄웁니다. 입력란에 cmd라고 입력하여 명령 프롬프트 창을 활성화합니다. SQLPLUS로 오라클 데이터베이스에 DAB 계정으로 접속을 진행합니다. DBA로 접속하는 명령어 입니다.

SQLPLUS " / as sysdba"

2. 오라클 데이타베이스 'service name'를 확인하는 방법입니다.

SQLPLUS로 DB에 접속한 다음 아래의 명령어를 실행하여 SID

SQL> SELECT NAME, DB_UNIQUE_NAME FROM v$database; 

3. 오라클 SID를 확인하는 방법입니다.

SQL> SELECT instance FROM v$thread; 

Oracle

오라클 sid, service name 값 확인

◈ SID

 DBMS(데이터 베이스를 관리 시스템) 서버를 기동하기 위해서는 DB서버가 기동하는 서버의 IP 
그리고 DB서버가 접속을 받아들이기 위한 프로토콜에 대한 정의가 필요합니다.

오라클의 경우 인스턴스가 서버 역할을 하는 DBMS프로세스인데, 인스턴스가 기동할때 SID를 필요로 합니다.

 SID는 인스턴스의 이름인 셈입니다.

SID가 필요한 이유는 한 서버(H/W)에 여러개의 인스턴스가 기동될 수 있으므로

구별하는 태그가 필요합니다.  따라서 SID는 DB서버에서 필요한 정보입니다.

SID정보는 환경변수와, LISTENER.ORA라는 파일에서 정의 됩니다.

 DB에 접속하는 클라이언트 프로그램의 경우 접속하고자 하는 오라클 인스턴스 정보를 필요로 합니다.

클라이언트 프로그램이 접속하는데 필요한 정보는 서버IP, 오라클SID, 접속프로토콜 같은 정보가 필요합니다. 
이러한 정보를 묶어서 서비스명으로 대표하고, 이 서비스명으로 클라이언트 프로그램이 서버에 접속하는데 사용합니다.

이 정보는 클라이언트쪽의 TNSNAMES.ORA라는 파일에 정의 되어있습니다.

- sid 확인방법

   1. 

SQLPLUS에서 확인
      dba계정으로 확인

      SQL> conn / as sysdba 
      Connected.
     SQL> select name from v$database;
     NAME
     ---------
     FUZEWIRE
   

   2.  제어판 >관리도구 > 서비스에서 OracleSrvice 서비스명
     => 예를들어 OracleServiceNaver가 있을경우 Naver가 SID 이다.

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

sqlgate나 sqldeveloper같은 툴에서 db에 연결할때,  
종종 sid와 service name를 입력해야 한다.

간단하게 설명하면,
sid는 각 인스턴스 별 id
service name은 전체 id

고로 DB장비가 2대로 구성이 되어있으면,
각 sid는 달라도, service name은 같을 수 있다.

자세한 설명은 -> http://blog.naver.com/myshyz/50037204012


sid, service name 확인하는 쿼리  

select name from v$database; select instance from v$thread;

jdbc 에서 thin 드라이버로 오라클에 접속할 때는 SID를 알아야 한다.
최근에는 SID로 직접 기술하여 접근하는 것보다는 service name 이라는 것을 tnsname.ora 파일에 지정해 놓고 이것을 사용한다. 아무래도 SID가 공개되는 것이 문제가 될 수 있을 것이다. 

<tnsname.ora 의 작성 예>

PRODDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 152.25.24.15)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL)
    )
  )

서비스명과 인스턴스명과 데이타베이스명과 SID는 서로 비슷한 듯 하면서 약간 다르다.

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

SELECT NAME, DB_UNIQUE_NAME FROM v$database;

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

SELECT instance FROM v$thread;

일반적인 경우 데이타베이스가 하나만으로 구성 되어 있다면 데이타베이스명이 SID가 된다. 하지만 RAC 로 구성하여 데이타베이스 두개가 동시 가동되는 경우라면 이 SID 가 서로 다를 수 있기 때문에 중복 확인해야 한다.JDBC 로 접속할 때 url 정보 작성 방법 :
    url=jdbc:oracle:thin:@ip주소:포트:SID
   (url=jdbc:oracle:thin:@192.168.20.1:1521:ORCL)

아래의 예제에서 보면 RAC로 묶여 있는 경우 DATABASE NAME 과 실제 INSTANCE NAME 은 서로 다를 수 있다. 데이타베이스명은 ORCL 이지만 인스턴스명은 ORCL1 과 ORCL2 로 이름이 다름.  thin 드라이브 URL 에서는 이 인스턴스명을 사용해야 한다. 

사용자명 입력: system/manager@PRODDB

다음에 접속됨:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
With the Real Application Clusters option

SQL> SELECT NAME, DB_UNIQUE_NAME FROM V$DATABASE;

NAME               DB_UNIQUE_NAME
------------------ ------------------------------------------------------------
ORCL               ORCL

SQL> SELECT INSTANCE FROM V$THREAD;

INSTANCE
--------------------------------------------------------------------------------
ORCL1
ORCL2

SQL>

<2012년2월10일>