Oracle - Net Services (ex SQL*Net)

Généralités

Ses principaux avantages sont : Oracle Net est basée sur la technologie Transparent Network Substrate (TNS). Trois composants de TNS sont aujourd'hui disponibles :

Vocabulaire
Node (noeud): composant du réseau logique (Serveur ou terminal)
Domain : groupe d'objets réseau (base) (StJust et StSeb)
Community : groupe de clients qui utilisent le même protocole;
Alias : autre nom d'un objet;

Serveur

Administration :
L'outil d'administration de SQL*Net est lsnrctl
On peut travailler en interactif en tapant: lsnrctl qui répond par le prompt:
LSNRCTL>
puis taper les différentes commandes.
On peut aussi travailler en mode ligne : lsnrctl start.
Les principaux ordres sont :

Fichiers de configuration :
Si notre configuration n''utilise pas le MPI du fait que tous nos clients et nos serveurs dialoguent en TCP/IP.
Le fichiers de configuration se limite à :
listener.ora qui décrit les différentes bases accessibles sur le serveur courant. Il est dans ORACLE_HOME/network/admin Port utilisé :En TCP/IP, le port utilisé est généralement 1521 ou 1525.

Démarrage automatique :

Sur Unix : une ligne à inserer dans le fichier de démarrage :
su - oracle -c " lsnrctl start "
sur NT : le service 'OracleListener'

config Clients et méthodes de résolution

Les fichiers utiles à la configuration d'un client SQL*Net se trouvent :
- soit dans le répertoire ORACLE_HOME/network
- soit dans le répertoire ORACLE_HOME/net80 suivant les versions.

Le client doit pouvoir traduire les alias SQL*Net qui lui sont fournis dans la chaine de connexion.
Il existe essentiellement trois méthodes de résolution de nom de base distante.

un fichier sqlnet.ora précise s'il existe l'ordre (les priorités) des méthodes de résolution de nom utilisées par le client à l'aide du paramètre NAMES.DIRECTORY_PATH.

Le fichier SQLNET.ORA contient des paramètres optionnels pour la trace, la journalisation, et

La résolution de noms peut être
- locale via le fichier tnsnames.ora, qui se trouve généralement dans ORACLE_HOME/network/admin
- centralisée par un serveur de nom spécifique le serveur OracleNames,
- fournie directement par la DNS : méthode HOSTNAME (en SQL*Net TCP/IP uniquement bien sûr...)

par défaut (par exemple s'il n'existe pas de fichier SQLNET.ORA) : dans l'ordre TNSNAMES, ONAMES, HOSTNAME.

Remarque : un poste NT ou Unix peut être à la fois client et serveur !

résolution locale via tnsnames.ora

Ce fichier doit se trouver sur le client, dans le sous répertoire ADMIN
- soit du répertoire ORACLE_HOME/network
- soit du répertoire ORACLE_HOME/net80 suivant les versions.

Il doit préciser essentiellemnt le protocole utilisé, le nom ou l'adresse IP de la machine cible, le cas échéant (TCP/IP) : le port d'écoute du serveur (1521 ou 1525 par défaut) et l'identifiant de la base sur le serveur (ORACLE_SID).
ces paramètres doivent être STRICTEMENT identique à ceux précisés dans le fichier de configuration du serveur : LISTENER.ORA

exemple de fichier TNSNAMES.ORA

################
# Filename......: tnsnames.ora
# Client Profile: sample
# Date..........: 09-DEC-93 11:47:33
################
info = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = cg13.tcp)
(PROTOCOL = TCP) (Host = docu) (Port = 1521)))
(CONNECT_DATA = (SID = INFUN)))
test = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = cg13.tcp)
(PROTOCOL = TCP) (Host = dsidev) (Port = 1521)))
(CONNECT_DATA = (SID = TEST)))
devel = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = cg13.tcp)
(PROTOCOL = TCP) (Host = dsidev) (Port = 1521)))
(CONNECT_DATA = (SID = DEVEL)))
...

ici le premier ALIAS : INFO pointe sur la base
- d'ORACLE_SID : INFUN,
- sur la machine : DOCU,
- via le protocole : TCP/IP,
- listener sur le port : 1521

on voit également qu'il y a 2 bases accessibles TEST et DEVEL sur la même machine dsidev...


résolution par serveur centralisé (OracleNames)

Oracle Names est un mecanisme qui se rapproche du DNS Unix. Ainsi l'alias fourni par l'application (scott@TEST) n'est plus résolu comme par le passé par le fichier tnsnames.ora situé sur le poste client ou sur un serveur qui partage les fichiers mais directement par un (ou plusieurs) serveur Names situé sur un serveur central. Sur ce serveur, les différents listeners de tout le réseau local de l'entreprise s'enregistrent au fur et à mesure de leur demarrage .

 

Mise en place du client

UNIX Windows NT
$ORACLE_HOME/network/admin/sqlnet.ora c:\orant\net80\admin\sqlnet.ora

\ = (ADDRESS=(PROTOCOL=IPC)(KEY=ONAMES))
oranamesrvr0 = (ADDRESS = (PROTOCOL = TCP)(HOST = se-tes-1)(PORT = 1575))
oranamesrvr1 = (ADDRESS = (PROTOCOL = TCP)(HOST = se-dev-1)(PORT = 1575))

UNIX Windows NT
Emplacement $ORACLE_HOME/network/names c:\orant\net80\names
Nom .sdns.ora sdns.ora

Cette procedure permet de s'affranchir de l'utilisation de Net8Assistant un produit Java qui ne donne pas toujours satisfaction.

Enregistrement des listeners

Pour qu'ils puissent s'enregistrer au demarrage tous les listeners doivent avoir le ligne :USE_PLUG_AND_PLAY=ON dans le fichier tnsnames.ora, en plus de la configuration décrite ci dessus.
De ce fait il ne doit plus y avoir de fichier tnsnames.ora ni dans /etc ni dans $ORACLE_HOME/network/admin/.
Si un logiciel ne tourne pas avec names ou avec Net8, il suffit, pour le ou les comptes concerné de positionner la variable TNS_ADMIN=chemin et dans le repertoire chemin de copier un sqlnet.ora sans la ligne précisant l'utilisation de Onames bien sûr...et un tnsnames.ora avec les alias concernés.

Serveurs Names

L'implantation d'un serveur names se fait en créant un fichier Names.ora dans $ORACLE_HOME/network/admin du type NAMES.SERVER_NAME=oranamesrvr1
NAMES.ADDRESSES= (ADDRESS=(PROTOCOL=TCP)(HOST=oranamesrvr1)(PORT=1575))

Gestion du serveur : on utilise la commande 'Namesctl'. La commande help permet d'avoir la liste exhaustive des commandes de gestion des erveurs de noms :

NAMESCTL> help
delegate_domain domain_hint exit flush flush_name
log_stats password ping query
quit register reload repeat* reset_stats restart
save_config set* show* shutdown
start start_client_cache startup status stop
timed_query unregister reorder_ns version
NAMESCTL>

Les principales commandes utiles sont :

start démarrage du serveur
stop/shutdown arrêt du serveur
ping test d'un serveur de nom
status état en temps réel du serveur
query test de résolution du nom d'un objet réseau
register enregistrement (non dynamique) d'un objet
set server définit un nouveau serveur de nom

exemple de création d'un nouveau nom de server de données :

NAMESCTL> REGISTER TOTO
-t oracle_database
-d (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.11.16)(PORT=11521))
(CONNECT_DATA=(SERVICE_NAME=PRDUN.CG13 .FR)))

Total response time: 0 seconds
Response status: normal, successful completion
Forwarding information:
oranamesrvr0 ==> oranamesrvr2

il peut être nécessaire de forcer le serveur de noms Oracle à recharger ses valeurs, avec la commande reload

NAMESCTL> set password XXXX
NAMESCTL> RELOAD

vérification
NAMESCTL> query TOTO
Total response time: 0 seconds
Response status: normal, successful completion
Authoritative answer: yes
Number of answers: 0
TTL: 1 day
NAMESCTL>

résolution via le DNS (méthode HOSTNAME)

Méthode très simple, puisque ne nécessite pas de fichier de config client, ni de serveur logiciel type Oracle Names.
Seulement une DNS...

Le seul fichier à toucher est le LISTENER.ORA du SERVEUR et éventuellement la config DNS.

Prévu à l'origine pour du fonctionnement mono base peut attaquer plusieurs bases sur la même machine serveur, si on définit des ALIAS DNS de la machine cible...

Quelques contraintes quand même:
- utiliser le protocole TCP/IP
- utiliser un serveur SQLNET (listener) version Net8 ou supérieure
- utiliser le port 1521 uniquement
- utiliser comme ALIAS de la base distante le nom du serveur

Voir un exemple de listener.ora monobase et un exemple à 2 bases.

ANNEXE 1 : listener.ora

################
# Filename......: listener.ora Fichier de description du serveur Oracle
# Date..........: 19-JUN-95 13:47:53
################
ISTENER =
(ADDRESS_LIST =
(ADDRESS =
(COMMUNITY = cg13.tcp)
(PROTOCOL = TCP)
(Host = doc)
(Port = 1521)
)
)
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10
LOG_FILE_LISTENER = /oracle/logs/logv2.log
TRACE_LEVEL_LISTENER = OFF
TRACE_DIRECTORY_LISTENER = /oracle/logs
TRACE_FILE_LISTENER = tracev2.trc
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = INFO)
(ORACLE_HOME = /oracle)
)
)

Les informations variables sont le nom du host (doc) et le nom de l'instance. (INFO).

 



modifié
le 20/11/2006

Ecrire a DD
ecris
moi


les forums techniques Oracle

mon BLOG Oracle,
en Francais
connaitre DD
l'autre vie
de DD

mon CV

trucs
et astuces

JOBs Oracle
du jour
Homepage "Tout sur Oracle"
Mon site :
Tout sur Oracle (et le web)
Copyright (C) 2002
Utilisation de ces documents