Connections oracle

De knowledge
Aller à la navigation Aller à la recherche

Comment gérer les connections des utilisateurs a une base Oracle.

Liste des utilisateurs connectés

Comment récupérer la liste des utilisateurs connectés à un schéma donné sur une base Oracle Donnée. (Dans cet exemple on cherche les utilisateurs connectés au schema 'jean')

   export ORACLE_SID=dbname
   sqlplus / as sysdba
   select sid, serial# from v$session where upper(username)=upper('jean');
      SID    SERIAL#
   ---------- ----------
      733       6738

Ici une connexion existe. On peut également faire une requête sur les autres champs de la vue v$session:

   osuser     le nom de l'utilisateur au niveau du system d'expoitation
   machine    l'ordinateur utilisé pour la connexion
   status     l'état de la connexion
   program    le programme utilisé pour accéder à la base (sqlplus, une application...)

Déconnecter les utilisateurs

Principe

La connexion est classique:

   export ORACLE_SID=dbname
   sqlplus / as sysdba

Puis il faut trouver les couples "SID + SERIAL#" de chacune des connexions:

   select sid, serial# from v$session where upper(username)=upper('jean');
      SID    SERIAL#
   ---------- ----------
      733       6738

Ensuite on cloture les connexions :

   alter system kill session 'sid, serial#';

Dans le cas ci dessus:

   alter system kill session '733, 6738';

Script

Un script simple permet de faciliter cette déconnexion "forcée".

Fichier "forcelogoff.sh"

Usage: ./forcelogoff.sh schema database

   #!/bin/bash
   if [ $# -ne 2 ]
   then
       echo "Usage: $0 schema db"
   fi
   echo "-------------------------------------------------------------"
   ./list_logged.sh $1 $2
   echo "-------------------------------------------------------------"


   echo "DO YOU WANT DO FORCE LOGOFF Y/N [N]?"
   read n
   export n="${n}n"
   if [[ ( $n != 'yn' ) && ( $n != 'Yn' ) ]]
   then
       echo "Aborted"
       exit 0
   fi


   echo "Generating kill sql script..."
   export TMPFILE=`date +%Y%m%d%H%M%S.tmp`
   export ORACLE_SID=$2
   sqlplus -s /nolog << EOF > $TMPFILE
    connect / as sysdba;
    SET pagesize 0;
    SET FEEDBACK OFF
    SET HEADING OFF
    SET VERIFY OFF
    SET ECHO OFF
    SET TIMING OFF
    SET pause off
        SET LINESIZE 600
    SET underline off
    SET trimspool off
    SET sqlblanklines ON
    select 'alter system kill session '''||sid||', '||serial#||''';' from v\$session where upper(username) =upper('$1');
   EOF
   echo "commit;" >> $TMPFILE
   echo "-------------------------------------------------------------"
   cat $TMPFILE
   echo "-------------------------------------------------------------"
   echo "DO YOU WANT TO EXECUTE THIS SCRIPT Y/N [N]?"
   read n
   export n="${n}n"
   if [[ ( $n != 'yn' ) && ( $n != 'Yn' ) ]]
   then
       echo "Aborted"
       rm -f $TMPFILE
       exit 0
   fi
   sqlplus -s /nolog << EOF
    connect / as sysdba;
    @$TMPFILE
   EOF
   rm -f $TMPFILE

Ce script commence par faire la liste des connexion puis demande une conformation. Ensuite il construit la requête de déconnexion et demande une seconde confirmation pour l'exécuter.

C'est par ailleurs un bon exemple de sql générant du sql.