[Oracle] SID, SNAME이란? SNAME 변경 방법

2025. 5. 23. 09:13·[DB]/- Oracle

1. 용어 개념 잡기

내용을 다루기에 앞서 용어에 대한 이해가 선행되어야 할 것 같다.

  • DB 서버 : 실제 데이터가 저장되는 위치로 여러 인스턴스가 연결될 수 있음
  • Instance(인스턴스) : DB 서버에 접속하기 위한 것으로 오직 하나의 DB에만 연결됨
  • RAC(Real Application Cluster) : 하나의 DB에 접속하기 위해 여러 인스턴스가 연결된 구조
  • HA(High Availability) : 동일한 DB 서버를 2대 구성하여 서비스 중단이 발생하지 않도록 하는 구조

보통 개인이 사용하는 간단한 형태에서는 하나의 DB 서버가 있고 이에 접속하기 위한 인스턴스도 역시 하나만 존재한다. 그렇기 때문에 이 개념을 다룰 일이 딱히 있지는 않을 것이다. 그러나 실제 서비스를 운영하는 경우에는 만약 이러한 구조를 사용했다면 하나의 인스턴스에서 오류가 발생한다면 DB에 접속할 수 있는 방법이 없어지는 것이다. 그렇기 때문에 서비스를 운영할 땐 RAC(Real Application Cluster)이나 HA(High Availability) 구조로 DB를 구성하곤 한다.

RAC와 HA에 대한 추가 내용은 아래 포스팅 참고!

 

[Oracle] RAC(Real Application Cluster)와 HA(High Availability)

1. 등장 배경 - 하나의 DB, 하나의 Instance 구조의 문제점일반적으로 사람들이 사용하는 DB는 하나의 DB, 그리고 하나의 Instance 형태다. 여기서 Instance란 DB에 접속하기 위한 창구 역할을 하는 것으로

semin1127.tistory.com

 

2. SID(System Identifier)

SID란 각 고유 인스턴스의 이름으로, 이 이름을 통해 RAC 환경의 DB에서 각 인스턴스를 식별할 수 있다. 그렇기 때문에 같은 DB 서버에서는 SID는 중복으로 설정할 수 없다. 서로 다른 DB 서버에서는 SID를 중복으로 설정할 수 있지만 이는 혼란을 야기할 수 있으므로 권장되지는 않는다. SID는 Oracle DB를 설치할 때 설정할 수 있는데, 보통은 XE 또는 ORCL이 기본값으로 설정된다.

 

아래 쿼리를 통해 현재 인스턴스의 SID를 확인할 수 있다.

SELECT instance FROM v$thread;

 

Java에서 JDBC로 DB Connection을 획득할 때 사용하는 url을 다음과 같이 사용했을텐데 여기서 마지막 부분이 SID에 해당했던 것이다.

//                                                                이 부분이 SID! ↓
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe");

 

 

3. SNAME(Service Name)

클라이언트가 DB에 접속할 때 사용할 수 있는 논리적 이름으로, 하나의 DB를 뜻하며 여러 인스턴스를 포괄할 수 있다. 즉, 여러 인스턴스가 하나의 SNAME에 포함될 수 있다는 것이다. 그렇다면 여기서 한 가지 궁금증을 가질 수 있다.

인스턴스는 고유한 SID로 식별한다고 했는데 SNAME을 여러 인스턴스에 동일하게 설정하면 인스턴스를 고유하게 식별하는 것이 불가능하지 않나?

 

분명 SID를 통해 각 인스턴스를 고유하게 식별한다고 했는데 이렇게 되면 각 인스턴스를 식별하지 못할 것 같다는 생각이 들었다. 관련 내용을 찾아보니 클라이언트가 접속을 요청하는 시점에 DB Listener가 알아서 해당 시점에 가용한 여러 인스턴스 중에서 최적의 인스턴스를 반환(=로드밸런싱 Load Balancing)해준다고 한다.

💡DB 리스너란 : 클라이언트의 DB 접속 요청을 처리하는 요소
💡로드밸런싱 : 부하를 최적화하기 위한 기술로 트래픽을 균등하게 배포하는 방법

 

현재 설정된 SNAME은 아래 쿼리로 확인할 수 있다.

SHOW PARAMETER service_names;

 

마찬가지로 JDBC에서 DB Connection을 획득할 때 사용하는 url 부분에 SNAME을 다음과 같이 //와 /를 사용하여 나타낼 수 있다.

//                                                            // ↓             / ↓
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe");

 

3-1. SNAME 변경해보기

SNAME은 다음 쿼리를 통해 변경할 수 있다.

ALTER SYSTEM SET SERVICE_NAMES='TEMPNAME';

 

SNAME을 변경하고 cmd에서 lsnrctl status 명령어를 입력하여 확인해보면 다음과 같이 바뀐 것을 확인할 수 있다.

 

JDBC를 통해 DB 커넥션을 얻을 땐 다음과 같이 바뀐 SNAME으로 작성하면 된다.

conn = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/tempname", "ORCLSTUDY", "1234");

저작자표시 비영리 (새창열림)

'[DB] > - Oracle' 카테고리의 다른 글

[Oracle] NVL, NVL2 함수  (0) 2025.05.27
[Oracle] 정규식 (일반 문자 - Literal Character, 메타 문자 - Meta Character)  (0) 2025.05.27
[Oracle] 숫자 -> 문자 변경 시 포맷 설정  (0) 2025.05.24
[Oracle] RAC(Real Application Cluster)와 HA(High Availability)  (0) 2025.05.22
[Oracle] Port 포트 번호 변경하는 방법  (0) 2025.05.22
'[DB]/- Oracle' 카테고리의 다른 글
  • [Oracle] 정규식 (일반 문자 - Literal Character, 메타 문자 - Meta Character)
  • [Oracle] 숫자 -> 문자 변경 시 포맷 설정
  • [Oracle] RAC(Real Application Cluster)와 HA(High Availability)
  • [Oracle] Port 포트 번호 변경하는 방법
Semincolon
Semincolon
It seems small, that semicolon is a big deal.
  • Semincolon
    Semincolon
    Semincolon
  • 전체
    오늘
    어제
    • 분류 전체보기 (133)
      • [Programming Language] (78)
        • [JSP] (6)
        • [Swift] (23)
        • [SwiftUI] (16)
        • [Python] (22)
        • [C언어] (6)
        • [Kotlin] (4)
        • [C#] (1)
      • [Frame Work] (5)
        • [Flutter] (4)
        • [Spring Boot] (1)
      • [Projects] (3)
        • [Android][Kotlin] 공유 캘린더(20.. (1)
        • [Unity] 인내의 숲(2024.03) (2)
      • [DB] (15)
        • - Oracle (15)
      • [Programmers] (25)
        • - SQL (25)
      • [ETC] (2)
      • Today's Learning (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Semincolon
[Oracle] SID, SNAME이란? SNAME 변경 방법
상단으로

티스토리툴바