Tenho essa ideia de que os nomes/aliases de serviços dados aos descritores de conexões em um arquivo tnsnames.ora (não aquele do servidor que os dblinks usam, mas o do público) não deve de forma alguma estar relacionado ao SID e muito menos ao nome do servidor.
Suponha que o nome do servidor seja "myserver" e o SID da instância seja "myinstance".
Eu acho que dar o alias "myinstance-at-myserver" para a string de conexão não é uma boa ideia porque você está de alguma forma acoplando algo lógico a algo físico.
- Estou certo ou errado e por quê?
Esta é a melhor prática?:
# one server-instance-named descriptor
MYINSTANCE-AT-MYSERVER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myinstance)
)
)
Ou é isso?
# several business-named descriptors pointing to the same listener
RRHH =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myinstance)
)
)
FINANCE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myinstance)
)
)
SALES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myinstance)
)
)
Eu certamente não gostaria de incluir o nome do servidor no alias do TNS. Parece muito provável que isso mude com o tempo, à medida que os bancos de dados mudam de um servidor para outro e as organizações mudam para coisas como o RAC, onde haveria vários servidores.
Supondo que seus nomes de serviço sejam escolhidos de forma significativa, esperaria que o nome do serviço correspondesse ao alias TNS, pois ambos são nomes lógicos para a mesma coisa. Essa não é uma regra rígida e rápida, é claro. Algumas organizações podem ter motivos para ter dois nomes lógicos separados para um único serviço. Por exemplo, você pode querer um único alias TNS
FINANCE
que aponte para oFINUSA
serviço para usuários nos EUA e para oFINFRA
serviço para usuários na França. Mas, para a grande maioria das situações, se o alias do TNS forFINANCE
, o nome do serviço também deve serFINANCE
.Qual é a coisa mais cara para você? Prioritizar.
Normalmente, a coisa mais cara é a confusão dos usuários. Usuários comuns raramente usam um nome TNS. Eles geralmente usam os dados por meio de um aplicativo dedicado e sabem apenas o nome do aplicativo, como o CRM. Usuários avançados se conectam a nomes TNS (pense em SQLdeveloper), mas também se conectam a aplicativos comuns. Por que você deseja que o aplicativo CRM use um nome TNS de ORION? Os usuários avançados veem o nome do TNS e tudo o que importam é o nome do TNS; não SID, não nome do host. Eles conversam com outros usuários em termos de nome TNS (obtenha esse relatório do FINANCEDB John!). O estado de confusão mínima do usuário ocorre quando o nome do TNS é igual ao nome do aplicativo que o utiliza. Ou exatamente o mesmo com "db" anexado. Portanto, o nome TNS é como CRM ou CRMDB. Eu prefiro o último.
A próxima coisa cara é mudar qualquer coisa dentro do tnsnames.ora. Você não sabe onde é distribuído. Você coloca o arquivo na máquina cliente ou em um servidor de aplicativos e, voila, três meses depois, ele apareceu magicamente em dezenas de outros. Você pode impedi-lo? (Não, você não pode.) Então, na prática, isso significa que uma vez que você dá a qualquer usuário um nome TNS, sua definição é imutável. Portanto, não coloque SID lá, coloque um SERVICE_NAME. Não coloque o endereço IP lá, coloque um nome de host. E esses dois ficariam com o nome TNS "para sempre", então não há razão para eles serem diferentes do nome TNS (navalha Occam).
A próxima coisa em termos de custo é um sistema operacional (máquina) e seu endereço IP. Você não pode pagar um sistema separado para cada nome TNS. Portanto, crmdb.mydomain.local não é o único nome para o endereço IP; o mesmo endereço IP teria mais nomes, como financedb.mydomain.local. O administrador do sistema operacional decidirá como fazer isso da melhor maneira e como determinar o nome do host principal do sistema operacional. Eles têm o mesmo problema com muitos outros sistemas - vários nomes referindo-se a um sistema operacional - portanto, devem ter uma solução em mãos. As únicas pessoas que estão confusas agora são DBAs e administradores de sistema operacional, eles veem vários nomes de host levando ao mesmo endereço IP. Mas os usuários não se importam com isso e não ficam confusos com isso. (A propósito, esta abordagem é coerente com o SCAN.)
A próxima coisa em termos de custo é um dos dois: uma instância do Oracle ou "custo administrativo de separar os esquemas da instância". A compensação é para você decidir.
E o SERVICE_NAME é basicamente gratuito. Cada nome TNS deve ter um SERVICE_NAME igual.