오라클 DB 접근할 때 SID 와 Service Name의 차이가 무엇일까 생각해본적이 있다.
특히 개발환경 또는 한개의 DB서버의 한개의 인스턴스만을 사용할때는 구분이 필요 없었다.
하지만 RAC(Real Application Cluser) 을 구성하게 되면
SID로 접근하기 보다는 Sevice Name을 사용하는게 더욱 효과적이다.
왜 그럴까?
SID : DB 인스턴스 1개
Service Name : 여러개의 인스턴스를 묶어 하나의 서비스로 구성하는 것
쉽게 말해서, 서버 한대에 여러개의 인스턴스가 있을 경우 각각의 인스턴스에는 서로 다른 SID가 있다.
SID로 접근할 경우 별도 다른 SID로 각각 접속해야 하는 것이다.
접속편의와 연속성 보장, SID 공개의 문제 등을 고려했을 때 이 SID를 묶어 하나의 서비스로 구성한
Service Name을 통한 접근이 더욱 효과적이다.
tnsnames.ora 에서는 이렇게 작성한다.
TESTDB=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.253.11.13)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
JDBC를 사용하여 접근시 url 작성
SID > : 을 사용
jdbc:oracle:thin:@10.253.11.13:ORA1
Service Name> / 을 사용
jdbc:oracle:thin:@10.253.11.13/ORA1
Service Name과 SID 확인 방법은?
--Service Name 확인 방법
SELECT NAME, DB_UNIQUE_NAME FROM v$database;
--SID 확인 방법
SELECT instance FROM v$thread;