Pour résoudre correctement cette erreur et se connecter à la base de données Oracle appropriée, nous devrons expliquer un peu comment Oracle se comporte et, par conséquent, ce qui cause ce problème en premier lieu.
SID contre SERVICE_NAMES
Il est important de comprendre la (légère) différence entre ce qu'Oracle définit comme un SID
par rapport à un SERVICE_NAME
, car nous utiliserons ces informations pour créer une chaîne de connexion appropriée ultérieurement.
Dans Oracle, l'identifiant système (ou SID
) est un identifiant local de huit caractères maximum qui est utilisé pour identifier une base de données particulière et la différencier des autres bases de données du système.
Souvent le SID
est le mot préfixe ou DB_UNIQUE_NAME
qui précède le DB_DOMAIN
. Par exemple, le SID
de notre bookstore
base de données, comme indiqué dans le global database name
de bookstore.company.com
.
SERVICE_NAMES
, d'autre part, représentent les noms par lesquels les instances de base de données peuvent être connectées. Un SERVICE_NAME
suivra généralement le format du SID
suivi du domaine de la base de données, comme ceci :DB_UNIQUE_NAME.DB_DOMAIN
L'écouteur TNS
Lorsqu'un client tente de se connecter à une base de données Oracle, plutôt que de se connecter à la base de données directement , il existe un service de courtage qui intervient et gère la demande de connexion pour le client.
Cette application de courtage est connue sous le nom de listener
et il effectue la tâche d'écouter pour les demandes entrantes des clients. Lorsqu'une requête est reçue, l'listener
traite et transmet cette demande au serveur de base de données Oracle approprié à l'aide d'un service handler
, qui sert simplement de connexion entre le listener
et le serveur de base de données.
Noms et configuration TNS
Lors de la connexion à une base de données Oracle, votre serveur de base de données aura généralement tnsnames.ora
, qui est un fichier de configuration qui informe le serveur sur NET_SERVICE_NAMES
qui sont des connexions de base de données valides. Par défaut, ce fichier se trouve dans ORACLE_HOME/network/admin
.
Par exemple, un NET_SERVICE_NAME
descripteur dans tnsnames.ora
peut être formaté comme ceci :
myDatabaseNetService =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1521)(QUEUESIZE = 100))
(CONNECT_DATA =
(SERVICE_NAME = bookstore.company.com)
)
)
Cela définirait un NET_SERVICE_NAME
en utilisant le SERVICE_NAME
dont nous avons parlé plus tôt (bookstore.company.com
) et se connectant à localhost
via le port 1521
.
Chaîne de connexion
Avec un peu plus de connaissances sur la façon dont Oracle se connecte réellement aux bases de données, nous pouvons maintenant voir comment les connection strings
sont formatés.
Se connecter via le nom TNS/NET_SERVICE_NAME
Lors de la connexion via un NET_SERVICE_NAME
comme spécifié dans votre tnsnames.ora
fichier de configuration, vous devez utiliser le username
, password
, puis ajoutez le NET_SERVICE_NAME
avec le @
symbole, comme ceci :
username/password@NET_SERVICE_NAME
Ainsi, pour notre précédent NET_SERVICE_NAME
descripteur ci-dessus, le véritable NET_SERVICE_NAME
nous avons défini était myDatabaseNetService
, notre chaîne de connexion pourrait donc ressembler à ceci :
john/Hunter2@myDatabaseNetService
Se connecter via SERVICE_NAME
Lors de la connexion via un SERVICE_NAME
, vous devrez également ajouter le host
et port
, avec le /
symbole précédant le SERVICE_NAME
lui-même :
username/password@host:port/SERVICE_NAME
Se connecter via SID
Enfin, si vous vous connectez sans un NET_SERVICE_NAME
configuré ou même SERVICE_NAME
, vous pouvez le faire directement via le SID
en utilisant le :
symbole au lieu du /
symbole comme avec le SERVICE_NAME
chaîne de connexion :
username/password@host:port:SID