11июл Убить неактивные сессии! Параметр resource_limit.

На одном подшефном сервере работаю нерадивые пользователи: подключаются к серверу с утреца и идут курить на несколько часиков. Научить их жизни не получается. Пришлось побороть их следующим образом:

Alter system set resource_limit=true scope=both;

ALTER PROFILE "DEFAULT" LIMIT IDLE_TIME 15;

Всем пользователям назначили этот профиль.Таким образом ограничили «курение» 15 минутами. Злостные «курильщики» получают сообщение: ORA-02396: exceeded maximum idle time, please connect again

Комментарии (6)

[196] Комментарий от Anonymous   17.07.2008(14:36:57)
Спасибо за напоминание.
[197] Комментарий от dbstalker   17.07.2008(14:58:22)
Всегда рады!
[200] Комментарий от denix1   19.07.2008(13:50:48)
стоило бы дополнить, что Злостные «курильщики» получают сообщение: ORA-02396 только при попытке чего-то там выполнить в сессии, к которой применились эти ресурсний лимиты, а вот еще не пытается ничего делать(комп перегрузился аварийно) то сессия будет себе жить дальше - ни живая ни мертвая
[310] Комментарий от viman   30.09.2008(8:46:48)
Да, такие сессии все равно, к сожалению, продолжают занимать ресурсы. Для принудительного их уничтожения достаточно запускать периодически через системный планировщик подобный скрипт(для Linux): #!/bin/bash # kill Oracle sessions, marked as 'SNIPED' or 'KILLED' export DISPLAY=localhost:0.0 export LANG= export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/9ir2 export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 export ORACLE_SID=asr export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/bin:$ORACLE_BASE/admin/$ORACLE_SID/scripts/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib ORACLEUSER_NAME=oracle username=`id -nu` if [ "$username" != "$ORACLEUSER_NAME" ] then echo echo echo "###################################################" echo "Warning! Only $ORACLEUSER_NAME user can run this script!" echo "Your login - $username. Exit" echo "###################################################" echo echo exit fi tmpsql=/tmp/$$.sql tmpsh=/tmp/$$.sh echo; echo; echo echo '==============================================' echo -n 'Start killing sniped session at ';date echo 'set heading off' > $tmpsql echo 'set feedback off' >> $tmpsql echo 'set linesize 200' >> $tmpsql echo 'set trimspool on' >> $tmpsql echo 'column cmd format a70' >> $tmpsql echo "spool $tmpsh" >> $tmpsql echo "SELECT 'kill -9 '||p.spid" >> $tmpsql echo 'FROM v$session s, v$process p' >>$tmpsql echo 'WHERE ((s.username IS NOT NULL)' >> $tmpsql echo "AND (NVL (s.osuser, 'x') <> 'SYSTEM')" >> $tmpsql echo "AND (s.TYPE <> 'BACKGROUND')" >> $tmpsql echo "and (s.STATUS in ('SNIPED','KILLED')))" >> $tmpsql echo "AND (p.addr(+) = s.paddr)" >> $tmpsql echo "and p.SPID is not null" >> $tmpsql echo '/' >> $tmpsql echo 'spool off' >> $tmpsql echo 'exit' >> $tmpsql sqlplus ' / as sysdba' @$tmpsql #run pack script /bin/bash $tmpsh rm -f $tmpsh rm -f $tmpsql echo -n 'Finish killing sniped session at ';date
[311] Комментарий от viman   30.09.2008(8:52:48)
Ой. :) с линукса перевод строки не воспринялся, исправляюсь: #!/bin/bash # kill Oracle sessions, marked as 'SNIPED' or 'KILLED' export DISPLAY=localhost:0.0 export LANG= export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/9ir2 export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 export ORACLE_SID=asr export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/bin:$ORACLE_BASE/admin/$ORACLE_SID/scripts/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib ORACLEUSER_NAME=oracle username=`id -nu` if [ "$username" != "$ORACLEUSER_NAME" ] then echo "###################################################" echo "Warning! Only $ORACLEUSER_NAME user can run this script!" echo "Your login - $username. Exit" echo "###################################################" echo exit fi tmpsql=/tmp/$$.sql tmpsh=/tmp/$$.sh echo; echo '==============================================' echo -n 'Start killing sniped session at ';date echo 'set heading off' > $tmpsql echo 'set feedback off' >> $tmpsql echo 'set linesize 200' >> $tmpsql echo 'set trimspool on' >> $tmpsql echo 'column cmd format a70' >> $tmpsql echo "spool $tmpsh" >> $tmpsql echo "SELECT 'kill -9 '||p.spid" >> $tmpsql echo 'FROM v$session s, v$process p' >>$tmpsql echo 'WHERE ((s.username IS NOT NULL)' >> $tmpsql echo "AND (NVL (s.osuser, 'x') <> 'SYSTEM')" >> $tmpsql echo "AND (s.TYPE <> 'BACKGROUND')" >> $tmpsql echo "and (s.STATUS in ('SNIPED','KILLED')))" >> $tmpsql echo "AND (p.addr(+) = s.paddr)" >> $tmpsql echo "and p.SPID is not null" >> $tmpsql echo '/' >> $tmpsql echo 'spool off' >> $tmpsql echo 'exit' >> $tmpsql sqlplus ' / as sysdba' @$tmpsql /bin/bash $tmpsh rm -f $tmpsh rm -f $tmpsql echo -n 'Finish killing sniped session at ';date
[312] Комментарий от viman   30.09.2008(8:54:14)
Опять все плохо... :(. Ну кому надо, тот разберется и поймет.



Новый комментарий

Имя
Электронная почта
 
Ваш сайт
Защита от спама: укажите сумму 7 + 6
   
 

Поиск по блогам



Подпишись на RSS:

RSS - Подписаться на блог



Читателям


Рекомендую к прочтению





Разделы блога



Последние публикации



Последние коментарии