Para resolver corretamente esse erro e conectar-se ao banco de dados Oracle apropriado, precisaremos expor um pouco sobre como o Oracle se comporta e, portanto, o que está causando esse problema em primeiro lugar.
SIDs x SERVICE_NAMES
É importante entender a (pequena) diferença entre o que a Oracle define como um
SID comparado a um SERVICE_NAME , pois usaremos essas informações para criar uma string de conexão adequada posteriormente. No Oracle, o identificador do sistema (ou
SID ) é um identificador local de até oito caracteres que é usado para identificar um determinado banco de dados e diferenciá-lo de outros bancos de dados no sistema. Muitas vezes, o
SID é a palavra de prefixo ou DB_UNIQUE_NAME que precede o DB_DOMAIN . Por exemplo, o SID da nossa bookstore banco de dados, como visto no global database name completo de bookstore.company.com . SERVICE_NAMES , por outro lado, representam os nomes pelos quais as instâncias de banco de dados podem ser conectadas. Um SERVICE_NAME normalmente seguirá o formato do SID seguido pelo domínio do banco de dados, assim:DB_UNIQUE_NAME.DB_DOMAIN O Ouvinte TNS
Quando um cliente está tentando se conectar a um banco de dados Oracle, em vez de se conectar ao banco de dados diretamente , existe um serviço de broker que intervém e trata do pedido de conexão para o cliente.
Este aplicativo corretor é conhecido como
listener e executa a tarefa de ouvir para solicitações de clientes recebidas. Quando uma solicitação é recebida, o listener processa e encaminha essa solicitação para o servidor de banco de dados Oracle apropriado usando um service handler , que apenas atua como a conexão entre o listener e o servidor de banco de dados. Nomes e configuração TNS
Ao se conectar a um banco de dados Oracle, normalmente seu servidor de banco de dados terá
tnsnames.ora , que é um arquivo de configuração que informa ao servidor sobre NET_SERVICE_NAMES que são conexões de banco de dados válidas. Por padrão, este arquivo está localizado em ORACLE_HOME/network/admin . Por exemplo, um
NET_SERVICE_NAME descritor em tnsnames.ora pode ser formatado assim:myDatabaseNetService =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1521)(QUEUESIZE = 100))
(CONNECT_DATA =
(SERVICE_NAME = bookstore.company.com)
)
)
Isso definiria um
NET_SERVICE_NAME usando o SERVICE_NAME discutimos anteriormente (bookstore.company.com ) e conectando-se a localhost pela porta 1521 . String de conexão
Com um pouco mais de conhecimento sobre como o Oracle realmente se conecta aos bancos de dados, agora podemos ver como as
connection strings são formatados. Conectar via Nome TNS/NET_SERVICE_NAME
Ao conectar por meio de um
NET_SERVICE_NAME conforme especificado em seu tnsnames.ora config, você deve usar o username , password e, em seguida, anexe o NET_SERVICE_NAME com o @ símbolo, assim:username/password@NET_SERVICE_NAME
Assim, para nosso
NET_SERVICE_NAME anterior descritor acima, o NET_SERVICE_NAME real definimos foi myDatabaseNetService , então nossa string de conexão pode ser algo assim:john/Hunter2@myDatabaseNetService
Conectar via SERVICE_NAME
Ao conectar por meio de um
SERVICE_NAME , você também precisará adicionar o host e port , junto com o / símbolo que precede o SERVICE_NAME em si:username/password@host:port/SERVICE_NAME
Conectar via SID
Finalmente, se conectar sem um
NET_SERVICE_NAME configurado ou até mesmo SERVICE_NAME , você pode fazer isso diretamente através do SID usando o : símbolo em vez do / símbolo como com o SERVICE_NAME cadeia de conexão:username/password@host:port:SID