Database
 sql >> Base de données >  >> RDS >> Database

Comment réparer ORA-12505, TNS :l'auditeur ne connaît pas actuellement le SID indiqué dans le descripteur de connexion

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