ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用Profile对用户Session会话进行资源限制

使用Profile对用户Session会话进行资源限制

原创 Linux操作系统 作者:jinyuhuahan 时间:2009-04-01 20:45:35 0 删除 编辑

通过profile可以对用户会话进行一定的限制,比如IDLE时间。
将IDLE超过一定时间的会话断开,可以减少数据库端的会话数量,减少资源耗用。
使用这些资源限制特性,需要设置resource_limit为TRUE:

该参数可以动态修改:
SQL> alter system set resource_limit=true;

数据库缺省的PROFILE设置为:

SQL> SELECT * FROM DBA_PROFILES;

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT
-------------------- -------------------------------- -------- ---------------
DEFAULT              COMPOSITE_LIMIT                  KERNEL  UNLIMITED
DEFAULT              SESSIONS_PER_USER                KERNEL  UNLIMITED
DEFAULT              CPU_PER_SESSION                  KERNEL  UNLIMITED
DEFAULT              CPU_PER_CALL                    KERNEL  UNLIMITED
DEFAULT              LOGICAL_READS_PER_SESSION        KERNEL  UNLIMITED
DEFAULT              LOGICAL_READS_PER_CALL          KERNEL  UNLIMITED
DEFAULT              IDLE_TIME                        KERNEL  UNLIMITED
DEFAULT              CONNECT_TIME                    KERNEL  UNLIMITED
DEFAULT              PRIVATE_SGA                      KERNEL  UNLIMITED
DEFAULT              FAILED_LOGIN_ATTEMPTS            PASSWORD 10
DEFAULT              PASSWORD_LIFE_TIME              PASSWORD UNLIMITED

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT
-------------------- -------------------------------- -------- ---------------
DEFAULT              PASSWORD_REUSE_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_REUSE_MAX              PASSWORD UNLIMITED
DEFAULT              PASSWORD_VERIFY_FUNCTION        PASSWORD NULL
DEFAULT              PASSWORD_LOCK_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_GRACE_TIME              PASSWORD UNLIMITED

创建一个允许3分钟IDLE时间的PROFILE:
SQL> CREATE PROFILE KILLIDLE LIMIT IDLE_TIME 3;
Profile created.

修改test用户的PROFILE使用新建的PROFILE:
alter user test profile killidle

定时删除会话

#!/bin/bash

tmpfile=/tmp/tmp.$$

sqlplus ' / as sysdba' << EOF

set heading off
spool on
spool $tmpfile
select p.SPID from v\$session s,v\$process p where s.paddr= p.addr and s.STATUS='SNIPED' ;
spool off
set serveroutput on ;
declare
v_sid number;
v_serial number;
v_sql varchar2(200) ;
CURSOR cur_session is
   select sid, serial# from v\$session where STATUS='SNIPED';
begin
open cur_session ;
fetch cur_session into v_sid , v_serial ;
while cur_session%found
loop
dbms_output.put_line('kill!') ;
v_sql:= 'alter system kill session '||''''||v_sid||','||v_serial||'''';
execute immediate v_sql ;
fetch cur_session into v_sid , v_serial ;
end loop ;
close cur_session ;
end ;
/
EOF

for x in `cat $tmpfile | grep "^[0123456789]"`
do
kill -9 $x
done
#rm $tmpfile

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14870673/viewspace-584297/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-03-17

  • 博文量
    19
  • 访问量
    24918