Oracle tnsnames.ora의 SID가 서비스 이름과 다른 점


답변:


154

@DAC의 인용문

간단히 말해 : SID = DB의 고유 이름, ServiceName = 연결시 사용되는 별칭

엄격하게 사실이 아닙니다. SID = INSTANCE의 고유 이름 (예 : 머신에서 실행중인 Oracle 프로세스). Oracle은 "데이터베이스"를 파일로 간주합니다.

서비스 이름 = INSTANCE (또는 여러 인스턴스)의 별칭. 이것의 주된 목적은 클러스터를 실행하는 경우 클라이언트가 "Sales me to a salesS.acme.com"이라고 말하고 DBA가 SALES.acme.com 요청에 사용 가능한 인스턴스 수를 즉시 변경할 수 있다는 것입니다. 또는 클라이언트가 설정을 변경할 필요없이 SALES.acme.com을 완전히 다른 데이터베이스로 옮기십시오.


1
예를 들어 SID가있을 수 있습니다 Sales1.Sales2Sales3서비스 이름을 통해 사용할 수 있습니다, 모두 Sales?

1
나는 그 반대의 경우라고 생각합니다. 많은 서비스를 이용할 수있는 하나의 SID가 있습니다. 그런 다음 서비스 중 하나를 사용하여 다른 SID / 데이터베이스를 가리킬 수 있습니다.
Colin Nicholls

TNS 이름과 동일한 Oracle SID 이름을 가질 수 있습니까? 문제가 될까요?
user2441441

2
@ user2441441 : Matthew가 설명한 설명에 따르면 여러 SID가있을 수 있다고 가정하고 모든 SID를 추상화하는 서비스가 한 번 있다고 가정합니다.
Dwarak

26

다음을 참조하십시오 : http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm

Oracle SID와 Oracle SERVICE NAME의 차이점은 무엇입니까? 하나의 구성 도구는 SERVICE NAME을 찾은 다음 다른 하나는 SID를 찾습니다! 무슨 일이야?!

Oracle SID는 인스턴스 / 데이터베이스를 고유하게 식별하는 고유 이름입니다. 여기서 서비스 이름은 데이터베이스에 원격으로 연결할 때 제공하는 TNS 별명이며이 서비스 이름은 클라이언트의 Tnsnames.ora 파일에 기록됩니다. SID와 동일하며 원하는 다른 이름을 지정할 수도 있습니다.

SERVICE_NAME은 oracle 8i부터 데이터베이스가 리스너에 등록 할 수있는 새로운 기능입니다. 데이터베이스가 이런 방식으로 리스너에 등록 된 경우 tnsnames.ora에서 SERVICE_NAME 매개 변수를 사용할 수 있습니다. 그렇지 않으면 tnsnames.ora에서 SID를 사용하십시오.

또한 OPS (RAC)가있는 경우 각 인스턴스마다 다른 SERVICE_NAME이 있습니다.

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

SERVICE_NAMES = sales.acme.com, widgetsales.acme.com

또한 서비스 이름을 사용하여 복제를 통해 서로 다른 두 데이터베이스에서 사용 가능한 단일 서비스를 식별 할 수 있습니다.

Oracle Parallel Server 환경에서는 모든 인스턴스에 대해이 매개 변수를 설정해야합니다.

간단히 말해 : SID = DB 인스턴스의 고유 이름, ServiceName = 연결시 사용되는 별칭


혼란 스러워요. RAC에서 그렇지 않습니까? 각 인스턴스마다 다른 "INSTANCE_NAME"이 있습니까? 그리고 하나의 SERVICE_NAME이 (가) 여러 인스턴스와 연관 될 수 있습니까?
Iwan Satria

20

나는 이것이 까다로운 도구, 용도, 사용자 또는 증상을 다룰 때 고대라는 것을 알고 있습니다 : sid & service naming one은 다음과 같이 tnsnames 항목에 약간의 유연성을 추가 할 수 있습니다.

mySID, mySID.whereever.com =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = myHostname)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = mySID.whereever.com)
    (SID = mySID)
    (SERVER = DEDICATED)
  )
)

나는 이것이 질문과 약간 관련이 있기 때문에 여기에 남겨 두겠다고 생각했으며 오라클 네트워킹의 분명하지 않은 특이성을 주위에 직조하려고 할 때 도움이 될 수 있습니다.


5

SID와 서비스 이름은 무엇입니까

https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm 에서 오라클의 설명서를 참조하십시오

나중에 위의 링크에 액세스 할 수없는 경우이 답변을 작성할 때 위의 링크는 "Database Net Services 관리자 가이드"의 연결 개념 장에있는 "데이터베이스 서비스 및 데이터베이스 인스턴스 식별"주제로 연결됩니다. . 이 안내서는 "Oracle Database Online Documentation, 10g Release 2 (10.2)"의 일부로 oracle에서 발행했습니다.

서로 사용해야 할 때? 왜 두 개가 필요합니까?

RAC 환경에서 아래 매핑을 고려하십시오.

SID SERVICE_NAME
bob1 bob
bob2 bob
bob3 bob
bob4 bob

로드 밸런싱이 구성된 경우 리스너는 4 개의 SID 모두에서 워크로드를 '밸런싱'합니다. 로드 밸런싱이 구성되어 있어도 원하는 경우 SERVICE_NAME 대신 SID를 사용하여 bob1에 항상 연결할 수 있습니다.

https://community.oracle.com/thread/4049517을 참조 하십시오


0

Oracle 용어집에 따라 :

SID는 Oracle 데이터베이스 인스턴스의 고유 이름입니다. ---> Oracle 데이터베이스간에 전환하려면 사용자가 원하는 SID <---를 ​​지정해야합니다. SID는 TNSNAMES.ORA 파일의 연결 설명 자의 CONNECT DATA 부분과 LISTENER.ORA 파일의 네트워크 리스너 정의에 포함되어 있습니다. 시스템 ID라고도합니다. Oracle 서비스 이름은 "MyOracleServiceORCL"과 같은 설명이 될 수 있습니다. Windows에서는 Windows 서비스에서 서비스 이름을 서비스로 실행할 수 있습니다.

더 나은 접근 방법으로 TNSNAMES.ORA에서 SID를 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.