7-Oracle Net

7.1 Serveurs utilisateur dédiés et partagés

Au niveau architecture système, il existe essentiellement 2 architectures :

  • l’une dédiée (dedicated)
  • l’autre partagée (shared ou multithreaded)

Par défaut Oracle fonctionne dans le premier mode.

Le choix du mode de fonctionnement impactera fortement la charge du système en terme de nombre de processus.

Serveurs dédiés (Oracle dedicated server)

En architecture standard Oracle, un process serveur (shadow process) est dédié à chaque session cliente.
En clair il ya autant de process sur le serveurs que de client connectés.

srv dedie

dedicated_srv


On peut lister ces process sur le serveur en sachant qu’ils ont un attribut ‘LOCAL=NO’

$> ps -ef|grep LOCAL
oracle 270380 1 0 Mar 03 - 10:05 oracleTEST (LOCAL=NO)
oracle 995516 4636838 0 13:42:07 pts/6 0:00 grep LOCAL
oracle 1024208 1 0 10:17:01 - 0:08 oracleTEST (LOCAL=NO)
oracle 4419740 1 0 11:38:21 - 0:00 oracleTEST (LOCAL=NO)
oracle 4468764 1 0 11:24:12 - 1:13 oracleTEST (LOCAL=NO)
oracle 4481238 1 0 10:15:28 - 0:07 oracleTEST (LOCAL=NO)

C’est donc le mode par défaut. Il est satisfaisant dans la plupart des cas, hormis lorsque le nombre d’utilisateurs connéctés simultanément ’sessions) est très important. Dans ce cas il sera peut-être intéressant de passer en architecture partagée pour diminuer le nombre de processus sur le serveur…

Serveurs partagés (Shared Server)

L’architecture clients / serveurs partagés (shared servers), baptisée ‘MultiThread’ dans les précédentes versions d’Oracle permet de ne pas dédier un process serveur à chaque demande d’ouverture de session d’un client.
Un ou plusieurs process partagés pourront ainsi supporter un grand nombre de connexions simultanées, sans augmenter linéairement le nombre de process serveurs.

arhitecture client-serveur partagé

shared_srv1


un “listener” SQL*Net est obligatoire, même si le client est situé sur la même machine que le serveur. On sera alors en pseudo accès distant, en “Loopback”

Les process en architecture serveurs partagés

Il faut au minimum 3 process pour que ça marche :

  • un listener , (LISTENER) process réseau qui attend les demandes de connexion utilisateur, et connecte le process utilisateur à un serveur partagé (ou à un serveur dédié en cas de demande expresse)
  • un dispatcher (ora_D00n) , qui place la requête dans une file d’attente (request queue) où le premier serveur partagé disponible se servira
    le nombre initial de dispatchers est donné par le paramètre DISPATCHERS de l’init.ora
  • un serveur partagé (ora_S00n) , qui traite effectivement la requête, accède au SGBD et met le résultat dans la file d’attente de réponse (response queue) du dispatcher demandeur.
    Il y a entre SHARED_SERVERS and MAX_SHARED_SERVERS (paramètres de l’ini.ora) qui peuvent être créés.

On peut voir sur le listing suivant, outre les process de fond du serveur, les process dispatcher et shared

$ > ps -ef|grep PPRUN
oracle 291042 1 49 Mar 03 - 53:21 ora_d003_PPRUN
oracle 315414 1 0 Mar 03 - 71:35 ora_d002_PPRUN
oracle 327688 1 0 Mar 03 - 112:29 ora_d001_PPRUN
oracle 368882 1 0 Mar 03 - 0:05 ora_qmnc_PPRUN
oracle 381180 1 2 Mar 03 - 51:42 ora_d000_PPRUN
oracle 385276 1 0 Mar 03 - 15:00 ora_mmnl_PPRUN
oracle 389214 1 76 13:41:14 - 0:22 ora_s001_PPRUN
oracle 663766 1 0 Mar 03 - 2:04 ora_pmon_PPRUN
oracle 819304 1 0 Mar 03 - 0:54 ora_mmon_PPRUN
oracle 843914 1 0 Mar 03 - 2:25 ora_smon_PPRUN
oracle 848122 1 0 Mar 03 - 6:08 ora_ckpt_PPRUN
oracle 925788 1 0 Mar 03 - 1:10 ora_psp0_PPRUN
oracle 930042 1 0 Mar 03 - 9:19 ora_lgwr_PPRUN
oracle 934012 1 2 Mar 03 - 5:55 ora_dbw0_PPRUN
oracle 938124 1 0 Mar 03 - 0:16 ora_mman_PPRUN
oracle 942294 1 0 Mar 03 - 0:00 ora_reco_PPRUN
oracle 954520 4636838 0 13:43:57 pts/6 0:00 grep PPRUN
oracle 962780 1 0 Mar 03 - 0:02 ora_q000_PPRUN
oracle 970974 1 0 Mar 03 - 0:04 ora_q001_PPRUN
oracle 4501582 1 0 13:38:20 - 0:49 ora_s000_PPRUN

rem : la zone mémoire utilisateur standard (PGA), dans ce type d’architecture, ne contient qu’une pile et les informations vraiment spécifiques du process user. Les autres informations normalement contenues en PGA sont déportées en SGA.

rem : en architecture serveur partagée, la taille de la SGA doit être revue sensiblement à la hausse du fait de l’incorporation des infos des PGAs utilisateur.

Le paramétrage

SQL> show parameter shared_server

NAME                   TYPE    VALUE
------------------     ------  -----
max_shared_servers     integer 40
shared_server_sessions integer
shared_servers         integer 10

SHARED_SERVERS
——————–
SHARED_SERVERS spécifie le nb de process lancés systématiquement au démarrage de l’instance. En cas de montée en charge, ce nombre pourra augmenter, mais ne descendra jamais en dessous de cette limite dans le cas inverse.

MAX_SHARED_SERVERS
——————-
MAX_SHARED_SERVERS spécifie le nb maximum de process qui peuvent tourner simultanément.
Il est compris entre SHARED_SERVER et PROCESSES.
Imposer cette limite permet de laisser des ’slots’ libres pour d’autre process comme les proces dédiés par exemple.
si MAX_SHARED_SERVERS n’est pas spécifié, un SHARED SERVER sera déclenché tant que le nb de ’slots’ de libre est > a 1/8 max(nb max process)
ou 2 si PROCESSES < 24.

7.2 Oracle Net

DAns une architecture client-serveur classique (a 2 poles  donc) , pour que la communication puisse s’établir avec  un serveur de données Oracle distant , il faut une couche réseau sur le client et une couche réseau sur le serveur (le listener) .: C’est Oracle Net.

oraclenet

Dans le cas d’architecture ‘client léger’, ou architecture à 3 poles (3 tier)  il n’existe pas de programme client sur le poste (à part le navigateur) et c’est le serveur d’application qui est client du serveur de données.
Ainsi dans le cas d’un pg PHP sur le web c’est le serveur Apache qui est client du serveur Oracle

oraclenet_3tier1

Les fichiers de configuration coté client et/ou serveur se trouvent dans le répertoire ORACLE_HOME/network/admin
Ils peuvent être en dernier ressort édités à la main (fichiers “texte”) mais on utilisera préférablement les Outils ‘Enterprise Manager’ ou ‘Net Manager’

Le programme client doit notamment pouvoir identifier le serveur de données Oracle sur le réseau.
Il utilise pour ce faire une résolution de nom de serveur.

Les méthodes de résolution de nom

Avec Oracle 10g, il existe 4 modes de nommage :
* local :
on utilise un fichier de configuration situé sur le poste client (et donc sur chaque poste client!), baptisé TNSNAMES.ORA
* via un annuaire :
on utilise un serveur d’annuaire compatible LDAP : Oracle Internet Directory par exemple…
* ‘facile’ (easy ou EZ connect) :
basé uniquement sur TCP/IP (exceptionnellement pas de couche spécifique Oracle Net nécessaire coté client…c’est pour cela que c’est ‘facile’)
On utilise dès lors une chaîne de connexion explicite, qui devra préciser le serveur (machine) cible, et éventuellement le port d’écoute du logiciel serveur Oracle Net, et un nom de service de données.
exemple : CONNECT X/Y@serveur_Z:1521/ma_base
note : le port 1521 est le port par défaut du listener Oracle Net.
* externe :
on utilise un service de nom externe, non Oracle mais compatible avec ce dernier (NIS, DCE)

Utilitaires de configuration

graphiques : Oracle Enterprise Manager et Oracle Net Manager (client lourd)

Pour accéder à l’utilitaire de configuration, à partir de la console EM, cliquer sur ‘Processus d’écoute’ ou ‘listener’ sur la page d’accueil, puis cliquer sur le lien ‘Administration des servicesréseau’.

Vous pouvez alors :

  • configurer le LISTENER
  • configurer une résolution de nom locale (tnsnames.ora)
  • configurer une résolution de nom centralisé par un annuaire (OID/LDAP)
  • gérer les emplacements de fichier de config du serveur

Pour lancer l’quivallent coté client on peut utiliser les commandes ‘netca’ pour ‘Network configuration Assistant’ ou ‘netmgr’ pour Network MAnager…

exemple d’écran de la Console EM qui permet de configurer le listener sur le serveur.

em_admin_reseau

lignes de commande Oracle net Listener
Si le PATH et ORACLE_HOME sont correctement positionnés sur Unix / Linux, il suffit de taper pour…
démarrage : $> lsnrctl start
arrêt : $> lsnrctl stop
statut : $> lsnrctl status

rem : sur Windows il suffit d’utiliser l’outil de gestion des services, pour le service ‘oracle listener’ …

Fichier de configuration client : TNSNAMES.ORA

exemple d’une entrée ‘ORCL_NET’ qui pointe sur la BD ‘ORCL’ du serveur ‘Daredevil’

# tnsnames.ora Network Configuration File:
# C:oracleproduct10.1.0Db_1networkadmintnsnames.ora
# Generated by Oracle configuration tools.
# lors de la création de la base par défaut ‘ORCL’
ORCL_NET = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DAREDEVIL)(PORT = 1521))

(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

Fichier de configuration serveur : LISTENER.ORA

# listener.ora Network Configuration
# File: C:oracleproduct10.1.0Db_1NETWORKADMINlistener.ora
# avec ajout d’un Service NGORCL
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = NGORCL)
(ORACLE_HOME = C:oracleproduct10.1.0Db_1)
(SID_NAME = ORCL)
)
) LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DAREDEVIL)(PORT = 1521))
)
)