Comprendre à quoi sert le listener et test avec tnsping

Une fois votre instance de base de données crée, paramétrée et démarrée, elle est prête à l'utilisation, mais peut être voudrez vous (c'est généralement le cas) pouvoir y accéder via le réseau.
Le listener Oracle est un service permettant d'utiliser TCP/IP pour accéder à votre base de données.
Le port du listener Oracle par défaut est le port 1521 TCP.

Pour celà, un certains nombre de paramètres de l'instance oracle sont précisés : le SID, le port d'écoute, l'ORACLE_HOME, le SSL, ...

Il permet alors d'avoir plusieurs adresses pour une même base de données, plusieurs base de données accessibles dont la version d'oracle est différentes via des ports différents, le chiffrement des transactions (utile si le serveur de base de données et le serveur d'application ne sont pas hébergés sur la même machine), ...

Le fichier de paramètre du listener se trouve dans $ORACLE_HOME/network/admin/ (ou $TNS_ADMIN) et se nomme listener.ora.


LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=mamachine)(PORT=1521))


Le listener se démarre de cette manière (avec l'utilisateur oracle) :
lsnrctl start
et s'arrête de la même manière :
lsnrctl stop

Pour vérifier qu'il tourne :
lsnrctl status
ou bien
ps -edf|grep tnslsnr|grep -v grep

Le listener est généralement arrété en cas d'intervention de maintenance, on s'assure de cette manière qu'aucune connexion via SQL*net ne pourra être effectuée sur l'instance en maintenance ; le DBA peut alors tranquillement utiliser SQL*plus.


Mettre en place plusieurs listeners sur une même machine



Pour des raisons de maintenance, il est interressant de séparer les accès des bases d'applications différentes. Pour celà, il faut définir deux instances de listener. Voici le listener.ora d'un tel exemple (1 listener pour l'instance de la base de donnée de l'appli 1 et un listener pour les deux instances de bases de données de l'appli 2) :

LSNAPP1 =
(ADDRESS_LIST =
(ADDRESS= (PROTOCOL= TCP)(Host=server.domain.dom)(Port= 1521))
)
SID_LIST_LSNAPP1 =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME= /oracle/ora_9.2.0)
(SID_NAME = APP1BD1)
)
)

LSNAPP2 =
(ADDRESS_LIST =
(ADDRESS= (PROTOCOL= TCP)(Host=server.domain.dom)(Port= 1522))
)
SID_LIST_LSNAPP2 =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME= /oracle/ora_9.2.0)
(SID_NAME = APP2BD1)
)
(SID_LIST =
(SID_DESC =
(ORACLE_HOME= /oracle/ora_9.2.0)
(SID_NAME = APP2BD2)
)
)


Ainsi, pour démarrer l'un ou l'autre listener, il faut lui préciser l'instance :
> lsnrctl start LSNAPP1
> lsnrctl start LSNAPP2

et
> lsnrctl stop LSNAPP1
> lsnrctl stop LSNAPP2


Coté client : le tnsnames.ora & le sqlnet.ora




Pour vérifier qu'un client a bien accès à une base de données, il lui faudra utiliser la commande fourni avec le client oracle : TNSPING. Mais avant il lui faut configurer le client en spécifiant dans le tnsnames.ora (dans $ORACLE_HOME/network/admin) l'accès à ces différents ORACLE_SID et, évidemment lui dire dans le sqlnet.ora (même emplacement) d'utiliser la résolution de SID par le tnsname (configuration par défaut) :

> cat sqlnet.ora
NAMES.DIRECTORY_PATH=(TNSNAMES)

> cat tnsnames.ora
BDEX=(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=monserver)
(PORT=1521)
)
(CONNECT_DATA=(SID=BDEX)) )

Test :
$> tnsping BDEX

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 24-MAY-2007 08:55:13
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
/app/oracle/product/xx.yy.zz/dbex/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = monserver)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = BDEX)))
OK (12 msec)


L'erreur ORA-12154 est fréquemment rencontrée lors d'une mauvaise configuration du listener.
Ainsi, il faut bien veiller à ne pas avoir d'espace mal placé (avant l'alias par exemple) et que l'ensemble soit correctement formé (notamment la correspondance des parenthèses).

L'erreur ORA-12560 est quant à elle généralement due à un problème d'accès à la demande : les variables d'environnement sont mal renseignées (SID, ORACLE_HOME, TNS_ADMIN) ; les fichiers n'ont pas les bons droits ; ou un problème réseau plus général (firewall, cable débranché, ...)

Le tnsnames.ora peut également servir sur le serveur afin de définir les DBlink. Dans ce cas, la déclaration des différentes bases de données s'effectue de la même manière que sur un poste client.

Voir également :
- arréter/démarrer une base ou modifier un paramètre.
- Tablespaces, datafiles et filesystem, comprendre le stockage
- DBlink : interroger une base distante
- Interaction shell Unix / sqlplus Oracle




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories