14 février 2009
6
14
/02
/février
/2009
14:52
Bonjour,
Il arrive parfois que l'on soit obligé de se connecter à un serveur oracle autrement qu'en local avec l'utilisateur SYS.
Cela peut par exemple arriver dans les cas suivants:
Je viens de créer une base DB1 sur une machine XP (ORA10-SRV4).
Sur un poste client, j'ajoute l'entrée suivante dans le tnsnames.ora
DB1_SRV4 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV4)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DB1)
)
)
Depuis mon poste client., il ne reste plus qu'a ouvrir une session sqlplus et se connecter en sys.
SQLPLUS /nolog
CONNECT SYS/oracle@DB1_SRV4
Et la ... patatra ORA-01031 : Insufficient privieges Impossible de se connecter à ma base en sys depuis un poste client.
Une solution serait donc d'autoriser les connexions distantes à SYS.
Pour cela,il faut s'assurent que le paramètre REMOTE_LOGIN_PASSOWORDFILE a la valeur EXCLUSIVE.
Il s'agit de la valeur par défaut. On peut supposer que si la valeur a été changé, c'est peut être justement pour éviter que l'on puisse se connecter en sys depuis un poste distant. Si néanmoins, on veut changer la valeur.
Remarque :
Le paramètre REMOTE_LOGIN_PASSWORDFILE peut prendre trois valeurs.
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
Si je précise SCOPE=SPFILE, c'est tout simplement que la modification de ce paramètre n'est pas modifiable de façon dynamique et nécessite un redémarrage de l'instance ORACLE. Si vous utilisez un PFILE plutôt qu'un SPFILE alors il faut ajouter la ligne suivtante dans votre fichie PFILE.
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
Ceci étant fait, cela ne suffit pas. Il va maintenant falloir créer ce qu'on appelle un fichier de mot passe via l'utilitaire ORAPWD
La syntaxe est relativement simple
orapwd file=password_file_name password=sys_password entries=nb_entries force=Y
Remarque : En fonction de l'environnement, le nom ainsi que l'emplacment du fichier peut être différent.
Ex1:Environnement Unix
Nom :orapwSID (ex:orapwdDB1)
Emplacement :ORACLE_HOME/dbs
Ex2: Envrironnement windows
Nom:PWDsid.ora
Emplacement :ORACLE_HOME\database
Dans mon cas précis, cela donnerait:
orapwd FILE=%ORACLE_HOME%\database\pwdDB1.ora PASSWORD=oracle ENTRIES=5
Je peux donc maintenant depuis un poste client lancer à nouveau une fentre sqlplus:
SQLPLUS /nolog
CONNECT sys/oracle@DB1_SRV4 as sysdba
Et maintenant que je suis connecté en sys, je vais enfin pouvoir arreter ma base
SHUTDOWN IMMEDIATE;
Puis la redémarrer.
STARTUP;
Arghh :ORA-12514 TNS : Le processus d'écoute ne connait pas actuellement le service demandé dans le descripteur de connexion.
Et vous pouvez toujours essayer de vous reconnecter, l'erreur persiste. Je viens d'arreter une base et je ne peux plus la remonté. En supposant que je n'ai plus accès au serveur, je suis dans la mouise...
Pour pouvoir me connecter à une instance inactive (pour la rédémarrer) il faut que l'instance soit connu du LISTENER.
ex LISTENER.ora (%ORACLE_HOME%\NETWORK\admin
# listener.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = DB1)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV4)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
Une fois que les lignes concernant DB1 ont été ajoutées dans le listener.ora, il faut recharger celui-ci afin que les modifications soient prise en compte.
Pour cela:
LSNRCTL RELOAD
et non pas
LSNRCTL STOP
LSNRCTL START
qui entraine pendant un cours instant une interuption de l'accès aux eventuelles autres bases qui seraient sur le serveur.
A partir de maintenant, je peux me connecter en SYS a un base active pour l'arreter aussi qu'à une base inactive pour la redémarrer.
Conclusion :
Afin d'éviter le désagrément de ne pas pouvoir se connecter à une base via un client (tout simplement parceque l'on n'a pas accès au serveur), ou pire pouvoir s'y connecter, mais ne pas redémarrer une instance, il convient lors de la création d'une base ORACLE d'indiquer au DBA qui créera la base tous les besoins futurs.Y en a même qui osent dire "Gouverner, c'est prévoir". Je dois avouer qu'a ce jour, je n'ai pas du rencontrer de bon gouverneur....
LAO.
Il arrive parfois que l'on soit obligé de se connecter à un serveur oracle autrement qu'en local avec l'utilisateur SYS.
Cela peut par exemple arriver dans les cas suivants:
- Besoin de stopper une base
- Besoin de redémarrer une base
- Opération de duplication.
- ...
Je viens de créer une base DB1 sur une machine XP (ORA10-SRV4).
Sur un poste client, j'ajoute l'entrée suivante dans le tnsnames.ora
DB1_SRV4 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV4)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DB1)
)
)
Depuis mon poste client., il ne reste plus qu'a ouvrir une session sqlplus et se connecter en sys.
SQLPLUS /nolog
CONNECT SYS/oracle@DB1_SRV4
Et la ... patatra ORA-01031 : Insufficient privieges Impossible de se connecter à ma base en sys depuis un poste client.
Une solution serait donc d'autoriser les connexions distantes à SYS.
Pour cela,il faut s'assurent que le paramètre REMOTE_LOGIN_PASSOWORDFILE a la valeur EXCLUSIVE.
Il s'agit de la valeur par défaut. On peut supposer que si la valeur a été changé, c'est peut être justement pour éviter que l'on puisse se connecter en sys depuis un poste distant. Si néanmoins, on veut changer la valeur.
Remarque :
Le paramètre REMOTE_LOGIN_PASSWORDFILE peut prendre trois valeurs.
- NONE
- EXCLUSIVE (le fichier de mot de passe est propre à une instance)
- SHARED (le fichier de mot des passe est partagé par plusieurs instances. Ex: RAC)
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
Si je précise SCOPE=SPFILE, c'est tout simplement que la modification de ce paramètre n'est pas modifiable de façon dynamique et nécessite un redémarrage de l'instance ORACLE. Si vous utilisez un PFILE plutôt qu'un SPFILE alors il faut ajouter la ligne suivtante dans votre fichie PFILE.
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
Ceci étant fait, cela ne suffit pas. Il va maintenant falloir créer ce qu'on appelle un fichier de mot passe via l'utilitaire ORAPWD
La syntaxe est relativement simple
orapwd file=password_file_name password=sys_password entries=nb_entries force=Y
Paramètre | Explications |
FILE | Permet d'indiquer le nom du fichier |
PASSWORD | Indique le mot de passe pour l'utilisateur SYS |
ENTRIES | Indique le nombre de connexion simultanées avec l'utilsateur SYS |
FORCE | Indique si il faut écraser le fichier existant. |
Remarque : En fonction de l'environnement, le nom ainsi que l'emplacment du fichier peut être différent.
Ex1:Environnement Unix
Nom :orapwSID (ex:orapwdDB1)
Emplacement :ORACLE_HOME/dbs
Ex2: Envrironnement windows
Nom:PWDsid.ora
Emplacement :ORACLE_HOME\database
Dans mon cas précis, cela donnerait:
orapwd FILE=%ORACLE_HOME%\database\pwdDB1.ora PASSWORD=oracle ENTRIES=5
Je peux donc maintenant depuis un poste client lancer à nouveau une fentre sqlplus:
SQLPLUS /nolog
CONNECT sys/oracle@DB1_SRV4 as sysdba
Et maintenant que je suis connecté en sys, je vais enfin pouvoir arreter ma base
SHUTDOWN IMMEDIATE;
Puis la redémarrer.
STARTUP;
Arghh :ORA-12514 TNS : Le processus d'écoute ne connait pas actuellement le service demandé dans le descripteur de connexion.
Et vous pouvez toujours essayer de vous reconnecter, l'erreur persiste. Je viens d'arreter une base et je ne peux plus la remonté. En supposant que je n'ai plus accès au serveur, je suis dans la mouise...
Pour pouvoir me connecter à une instance inactive (pour la rédémarrer) il faut que l'instance soit connu du LISTENER.
ex LISTENER.ora (%ORACLE_HOME%\NETWORK\admin
# listener.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = DB1)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV4)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
Une fois que les lignes concernant DB1 ont été ajoutées dans le listener.ora, il faut recharger celui-ci afin que les modifications soient prise en compte.
Pour cela:
LSNRCTL RELOAD
et non pas
LSNRCTL STOP
LSNRCTL START
qui entraine pendant un cours instant une interuption de l'accès aux eventuelles autres bases qui seraient sur le serveur.
A partir de maintenant, je peux me connecter en SYS a un base active pour l'arreter aussi qu'à une base inactive pour la redémarrer.
Conclusion :
Afin d'éviter le désagrément de ne pas pouvoir se connecter à une base via un client (tout simplement parceque l'on n'a pas accès au serveur), ou pire pouvoir s'y connecter, mais ne pas redémarrer une instance, il convient lors de la création d'une base ORACLE d'indiquer au DBA qui créera la base tous les besoins futurs.Y en a même qui osent dire "Gouverner, c'est prévoir". Je dois avouer qu'a ce jour, je n'ai pas du rencontrer de bon gouverneur....
LAO.