Connections oracle
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.