Como o SID é diferente do Nome do serviço no Oracle tnsnames.ora

178

Por que eu preciso de dois deles? Quando eu tenho que usar um ou outro?

Georgy Bolyuba
fonte
1
Como encontrar o nome do nosso serviço quando eu tenho o nome SID?
Mrinal Saurabh

Respostas:

154

Citação de @DAC

Em resumo: SID = o nome exclusivo do seu banco de dados, ServiceName = o alias usado ao conectar

Não é estritamente verdade. SID = nome exclusivo da INSTANCE (por exemplo, o processo Oracle em execução na máquina). A Oracle considera o "Banco de Dados" como os arquivos.

Nome do serviço = alias para uma INSTANCE (ou várias instâncias). O principal objetivo disso é que, se você estiver executando um cluster, o cliente poderá dizer "conecte-me ao SALES.acme.com", o DBA poderá alterar rapidamente o número de instâncias disponíveis para solicitações do SALES.acme.com, ou mesmo mova SALES.acme.com para um banco de dados completamente diferente sem que o cliente precise alterar nenhuma configuração.

Matthew Watson
fonte
1
Assim, no seu exemplo, pode haver SID Sales1, Sales2e Sales3, todos os quais estão disponíveis através do nome do serviço Sales?
1
Eu acho que o oposto é o caso: você tem um SID que está disponível como muitos serviços. Você pode pegar um dos serviços e apontá-lo para um SID / banco de dados diferente.
Colin Nicholls
Podemos ter o nome do Oracle SID igual ao nome do TNS? Será um problema?
user2441441
2
@ user2441441: Indo pela explicação Matthew deu, acho que você está bem no pressuposto de que não pode haver vários SIDs e uma vez serviço que abstrai todos os SID
Dwarak
26

Consulte: http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm

Qual é a diferença entre os SIDs do Oracle e os NOMES DE SERVIÇO do Oracle. Uma ferramenta de configuração procura NOME DO SERVIÇO e, em seguida, a próxima procura por SIDs! O que está acontecendo?!

Oracle SID é o nome exclusivo que identifica exclusivamente sua instância / banco de dados, onde como Nome do serviço é o alias do TNS que você fornece quando se conecta remotamente ao seu banco de dados e esse nome do Serviço é registrado no arquivo Tnsnames.ora em seus clientes e pode ser o igual ao SID e você também pode atribuir qualquer outro nome que desejar.

SERVICE_NAME é o novo recurso do oracle 8i em que o banco de dados pode se registrar no ouvinte. Se o banco de dados estiver registrado com o listener dessa maneira, você poderá usar o parâmetro SERVICE_NAME em tnsnames.ora, caso contrário - use o SID em tnsnames.ora.

Além disso, se você tiver OPS (RAC), terá SERVICE_NAME diferente para cada instância.

SERVICE_NAMES especifica um ou mais nomes para o serviço de banco de dados ao qual esta instância se conecta. Você pode especificar vários nomes de serviços para distinguir entre diferentes usos do mesmo banco de dados. Por exemplo:

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

Você também pode usar nomes de serviço para identificar um único serviço disponível em dois bancos de dados diferentes através do uso de replicação.

Em um ambiente do Oracle Parallel Server, você deve definir esse parâmetro para cada instância.

Em resumo: SID = o nome exclusivo da sua instância de banco de dados, ServiceName = o alias usado ao conectar

DAC
fonte
Estou confuso. Não deveria ser no RAC, você terá "INSTANCE_NAME" diferente para cada instância? E um SERVICE_NAME pode estar associado a várias instâncias?
Iwan Satria
20

Eu sei que isso é antigo, no entanto, quando se lida com ferramentas, usos, usuários ou sintomas exigentes, pode-se adicionar um pouco de flexibilidade às suas entradas tnsnames, como:

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)
  )
)

Eu apenas pensei em deixar isso aqui, pois é levemente relevante para a pergunta e pode ser útil ao tentar tecer em torno de algumas idiossincrasias menos do que claras de redes de oracle.

seorphates
fonte
5

o que é um nome de SID e serviço

consulte a documentação da oracle em https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm

Caso o link acima não esteja acessível no futuro, no momento em que você escrever esta resposta, o link acima o direcionará para o tópico "Serviço de banco de dados e identificação de instância de banco de dados" no capítulo Conceitos de conectividade do "Guia do Administrador de Serviços de Rede de Banco de Dados" . Este guia é publicado pela oracle como parte de "Oracle Database Online Documentation, 10g Release 2 (10.2)"

Quando eu tenho que usar um ou outro? Por que eu preciso de dois deles?

Considere o mapeamento abaixo em um ambiente RAC,

SID SERVICE_NAME
bob1
bob2
bob2
bob3 bob3 bob4 bob

se o balanceamento de carga estiver configurado, o ouvinte 'equilibrará' a carga de trabalho nos quatro SIDs. Mesmo se o balanceamento de carga estiver configurado, você poderá se conectar ao bob1 o tempo todo, se desejar, usando o SID em vez de SERVICE_NAME.

Por favor, consulte, https://community.oracle.com/thread/4049517

swaroop
fonte
0

Conforme o Oracle Glossary:

SID é um nome exclusivo para uma instância de banco de dados Oracle. ---> Para alternar entre os bancos de dados Oracle, os usuários devem especificar o SID desejado <---. O SID está incluído nas partes CONNECT DATA dos descritores de conexão em um arquivo TNSNAMES.ORA e na definição do ouvinte de rede no arquivo LISTENER.ORA. Também conhecido como ID do sistema. O nome do serviço Oracle pode ser qualquer coisa descritiva como "MyOracleServiceORCL". No Windows, é possível que o Nome do serviço seja executado como um serviço nos Serviços do Windows.

Você deve usar o SID no TNSNAMES.ORA como uma abordagem melhor.

Ashish
fonte