Configuration SQLdeveloper , instant client Oracle, OID LDAP

Musée des erreurs, Oracle Net, scripts et trucs pas de Commentaire »

Par défaut SQL Developer ne reconnait pas la configuration standard Oracle Net et notamment la résolution de nom via OID, même  si le client est correctement configuré par ailleurs.

ie : une connexion sqlplus fonctionne avec la résolution via OID mais pas sqldeveloper.

Si vous tentez une connexion LDAP vous risquez une erreur du genre : ‘ property ‘hostname’ not set on the database provider ‘ …

Les hypotheses ici :

ORACLE_HOME c:\oracle\instant_client

et dans le sous répertoire standard \network\admin les fichiers de configuration pour la résolution de nom via OID / LDAP :

sqlnet.ora
NAMES.DIRECTORY_PATH= (LDAP, EZCONNECT)
TNSPING.TRACE_DIRECTORY = c:\oracle\instant_client_10g
TNSPING.TRACE_LEVEL = c:\oracle\instant_client_10g

ldap.ora
DEFAULT_ADMIN_CONTEXT = “dc=mondomaine,dc=fr”
DIRECTORY_SERVERS = (sr-oid.mondomaine.fr:389)
DIRECTORY_SERVER_TYPE = OID

Pour que SQLdevelopper fonctionne il faut rajouter la variable TNS_ADMIN dans l’environnement WINDOWS qui pointe sur votre rep NETWORK\ADMIN

C:\>set tns_admin=C:\oracle\instant_client_10g\Network \Admin

ou utiliser la fenetre ‘propriétés’ de vopre poste de travail et le bouton ‘variables d’environnement’ pour ajouter TNS_ADMIN

Dès lors SQLdevelopper reconnait votre serveur LDAP qui apparait dans la liste déroulante (si vous avez choisit ‘type de connexion’ LDAP)

sqld_ldap

Ensuite il ne vous reste plus qu’a choisir le contexte racine dans la liste et cliquer sur le bouton ‘charger’ pour avoir la liste de vos alias définis dans OID…

Listener et services Oracle Net 10g…

Oracle Net pas de Commentaire »

…en 10g !!!!!!!

La plupart des configurations d’Oracle que l’on trouve sur les machines, sont faites manuellement et héritées de Oracle 9i, elles même héritées de Oracle 8i, etc…
Bilan des courses on fonctionne dans un mode dégradé sans utiliser les fonctionnalités de la 10g et notamment :

  • les outils de configuration graphiques de Oracle Net (oui j’en vois dans le fond qui font des copier/coller dans tnsnames.ora et listener.ora
  • la notion de SERVICE (oui , les mêmes mettent encore des SID a la place!)
  • et l’enregistrement dynamique des instances Oracle auprès du LISTENER.

C’est ce a quoi nous allons essayer de remédier ici.

Intérêt des services dynamiques

Si Oracle Net et la base sont correctement configurés , il ne sera plus nécessaire de spécifier / décrire des services dans le LISTENER.ORA, ce qui constituait un écueil lors de changement de la configuration dans les versions précédentes (un LISTENER.ORA vide ou presque est assez portable!)
De plus lors du démarrage ou de l’arrêt de bases celles-ci s’attachent dynamiquement au LISTENER, via le processus PMON.

Cas d’un LISTENER par défaut.

Un listener par défaut c’est un listener qui s’appelle …LISTENER, qui écoute sur le port 1521 et qui s’appuie sur TCP/IP !

Dans ce cas il suffit de positionner 2 paramètres de l’instance :

  • DB_NAME : le nom de l’instance (dont héritera DB_UNIQUE_NAME)
  • DB_DOMAIN : le domaine par défaut

Ces 2 paramètres concaténés vont servir à constituer un nom de base global, sensiblement équivallent (d’après ce que j’ai compris) au SERVICE NAME.

note : DB_DOMAIN est un paramètre statique et ne peut donc être modifié avec un ‘ALTER SYSTEM SET DB_DOMAIN’
Voir le paragraphe ‘modifier DB_DOMAIN ci- après…

Un nom de base unique sur le réseau (nom_base + domaine) donnera par défaut le nom de service.

A partir de la…ca marche tout seul.

SQL> show parameter NAME
NAME            TYPE        VALUE
--------        ------      ------
db_name         string      DBAUN
db_unique_name  string      DBAUN
global_names    boolean     FALSE
instance_name   string      DBAUN
service_names   string
...
SQL> show parameter DOMAIN

On voit que DB_NAME est positionné, (et donc DB_UNIQUE_NAME aussi) et que DB_DOMAIN également

Si la base est démarrée (et le LISTENER aussi) on peut voir les services enregistrés automatiquement avec la commande ‘lsnrctl service’

srv7$> lsnrctl service
LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Production on 06-FEB-2009 11:30:34
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=srv7)(PORT=1521)))
Services Summary…
Service “DBAUN.dd.fr” has 1 instance(s).
Instance “DBAUN”, status READY, has 2 handler(s) for this service…
Handler(s):
“D000″ established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: srv7, pid: 5070866>
(ADDRESS=(PROTOCOL=tcp)(HOST=srv7)(PORT=38988))
“DEDICATED” established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully

rem : Oracle BROKER pour Dataguard démarre 2 services particuliers qui s’appellent <ORACLE_SID>_XPT et <ORACLE_SID>_DGB

Symétriquement, si l’on arrete la base, les services sont détachées automatiquement (et miraculeusement) du listener :

sv7$ >sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Fri Feb 6 11:43:50 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown abort
ORACLE instance shut down.
SQL>exit

et si l’on vérifie les services du LISTENER on a :

srv7$> >lsnrctl service
LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Production on 06-FEB-2009 11:45:51
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=srv7)(PORT=1521)))
The listener supports no services
The command completed successfully

Services compris !

L’enregistrement automatique déclenche un service gratuit (et généralement superflu) qui a poour nom : <ORACLE_SID>_XPT.
Ce service est utile a Dataguard et donc aux stand by database. En architecture classique…il ne sert à rien.

Pour le supprimer, on utilise un paramètre caché de l’instance (__dg_broker_service_names, avec 2 underscores) , que l’on initialise à vide :

SQL> alter system set “__dg_broker_service_names” = ‘ ‘ scope=both;

Cas d’un listener spécifique (non par défaut)

Cf la définition vue plus haut, un listener spécifique est un listener :

  • qui ne s’appelle pas LISTENER ou…
  • qui n’écoute pas sur le port 1521
  • ou qui n’utilise pas TCP/IP

Dans ce cas on utilisera un parametre d’initialisation particulier pour spécifier ce LISTENER.

SQL> ALTER SYSTEM SET LOCAL_LISTENER=LISNERDD SCOPE=BOTH;
SQL> show parameter LOCAL_L
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
local_listener                       string      LISTENERDD

Le nom du listener ici LISTENERDD doit être traduit, pour en préciser les caractéristiques spécifiques.
Ceci peut être fait avec une chaine de connexion (CONNECT STRING° explicite dans le tnsnames.ora

LISTENERDD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1522)) )

Parenthèse : Comment modifier DB_DOMAIN ?

Si on utilise un init.ora il suffit de modifier (ou ajouter) le paramètre avec un éditeur de texte :

DB_DOMAIN = mon_domaine.fr

et faire un Shutdown / startup de la base.

Si on utilise un SPFILE, il faut créer un init.ora, le modifier et recréer le SPFILE :

SQL> CREATE PFILE FROM SPFILE;
vi $ORACLE_HOME/dbs/initMON_SID.ora … (et ajout de DB_DOMAIN = mon_domaine.fr)
SQL> SHUTDOWN ABORT
SQL> STARTUP PFILE=iniTMON_SID.ora
SQL> CREATE SPFILE FROM PFILE;
SQL> SHUTDOWN ABORT
SQL> STARTUP