Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
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:
  • Besoin de stopper une base
  • Besoin de redémarrer une base
  • Opération de duplication.
  • ...
Si vous ne voulez pas avoir de mauvaise surprise le jour venu, il convient de s'assurer que vous pouvez bien vous connecter depuis un poste client sur votre base préférée en SYS.

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.










Partager cet article
Repost0

commentaires

S
Question:<br /> <br /> Que représente les entrées :<br /> (description_list ...protocol =IPC...)<br /> et<br /> (...SID_NAME=PLSExtProc)...<br /> dans le listener ?<br /> <br /> Merci d'avance
Répondre
D
C'est encore moi, c'est résolu. En fait c'était un pb avec orapwd qui avait généré un fichier vide ( sys n'y etait plus ). <br /> <br /> Merci et bonne journée.
Répondre
D
Arghh... c'est au shutdown que j'ai un pb :<br /> <br /> gatstweb:/USERGA/gatstweb> sqlplus /nolog<br /> SQL> connect sys/******@Mabase<br /> SQL*Plus: Release 9.2.0.4.0 <br /> ...<br /> SQL> shutdown immediate<br /> ORA-01031: privilèges insuffisants<br /> SQL><br /> <br /> j'ai le meme soucis en mode dba :<br /> SQL> connect sys/*****@Mabase as sysdba<br /> ERROR:<br /> ORA-01031: privilèges insuffisants<br /> <br /> Une idée ?
Répondre
L
<br /> Bonjour,<br /> <br /> OS supportant la base (windows, linux, ...) ?<br /> Valeur du paramètre  remote_login_passwordfile<br /> Est ce que le fichier de mot de passe a bien été crée avec le bon format et au bon endroit ?<br /> <br /> LAO.<br /> <br /> <br />
D
Milles merci pour cet article. Vos articles sont précieux pour un Dba occasionnel comme moi et mes collègues.<br /> J'avais justement ce soucis !.
Répondre
L
<br /> <br /> Heureux que ca puisse servir !<br /> LAO.<br /> <br /> <br /> <br />