Por que eu preciso de dois deles? Quando eu tenho que usar um ou outro?
Por que eu preciso de dois deles? Quando eu tenho que usar um ou outro?
Respostas:
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.
Sales1
, Sales2
e Sales3
, todos os quais estão disponíveis através do nome do serviço Sales
?
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
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.
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
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.