oracle连接数过多清理机制.docx
- 文档编号:25191620
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:15
- 大小:19.43KB
oracle连接数过多清理机制.docx
《oracle连接数过多清理机制.docx》由会员分享,可在线阅读,更多相关《oracle连接数过多清理机制.docx(15页珍藏版)》请在冰豆网上搜索。
oracle连接数过多清理机制
Oracle连接数过多释放机制
转载 2011年07月05日18:
07:
21
∙标签:
∙oracle /
∙session /
∙sql /
∙数据库 /
∙kill /
∙system
∙14532
Oracle服务器连接数过多会当掉,把连接数过多的客户机网线拔出后,在远程Oracle上依然还会保留此用户的连接数,久久不能释放,上网查了下可以以下面方法解决。
通过profile可以对用户会话进行一定的限制,比如IDLE时间。
将IDLE超过一定时间的会话断开,可以减少数据库端的会话数量,减少资源耗用。
使用这些资源限制特性,需要设置resource_limit为TRUE:
[oracle@test126udump]$sqlplus"/assysdba"
SQL*Plus:
Release10.2.0.1.0-ProductiononFriOct1307:
58:
212006
Copyright(c)1982,2005,Oracle. Allrightsreserved.
Connectedto:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioningandDataMiningoptions
SQL>showparameterresource
NAME TYPE VALUE
-----------------------------------------------------------------------------
resource_limit boolean TRUE
resource_manager_plan string
该参数可以动态修改:
SQL>altersystemsetresource_limit=true;
Systemaltered.
数据库缺省的PROFILE设置为:
SQL>SELECT*FROMDBA_PROFILES;
PROFILE RESOURCE_NAME RESOURCELIMIT
---------------------------------------------------------------------------
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 PASSWORD10
DEFAULT PASSWORD_LIFE_TIME PASSWORDUNLIMITED
PROFILE RESOURCE_NAME RESOURCELIMIT
---------------------------------------------------------------------------
DEFAULT PASSWORD_REUSE_TIME PASSWORDUNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORDUNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORDNULL
DEFAULT PASSWORD_LOCK_TIME PASSWORDUNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORDUNLIMITED
16rowsselected.
创建一个允许3分钟IDLE时间的PROFILE:
SQL>CREATEPROFILEKILLIDLELIMITIDLE_TIME3;
Profilecreated.
新创建PROFILE的内容:
SQL>collimitfora10
SQL>select*fromdba_profileswhereprofile='KILLIDLE';
PROFILE RESOURCE_NAME RESOURCELIMIT
--------------------------------------------------------------------------------
KILLIDLE COMPOSITE_LIMIT KERNEL DEFAULT
KILLIDLE SESSIONS_PER_USER KERNEL DEFAULT
KILLIDLE CPU_PER_SESSION KERNEL DEFAULT
KILLIDLE CPU_PER_CALL KERNEL DEFAULT
KILLIDLE LOGICAL_READS_PER_SESSION KERNEL DEFAULT
KILLIDLE LOGICAL_READS_PER_CALL KERNEL DEFAULT
KILLIDLE IDLE_TIME KERNEL 3
KILLIDLE CONNECT_TIME KERNEL DEFAULT
KILLIDLE PRIVATE_SGA KERNEL DEFAULT
KILLIDLE FAILED_LOGIN_ATTEMPTS PASSWORDDEFAULT
KILLIDLE PASSWORD_LIFE_TIME PASSWORDDEFAULT
PROFILE RESOURCE_NAME RESOURCELIMIT
--------------------------------------------------------------------------------
KILLIDLE PASSWORD_REUSE_TIME PASSWORDDEFAULT
KILLIDLE PASSWORD_REUSE_MAX PASSWORDDEFAULT
KILLIDLE PASSWORD_VERIFY_FUNCTION PASSWORDDEFAULT
KILLIDLE PASSWORD_LOCK_TIME PASSWORDDEFAULT
KILLIDLE PASSWORD_GRACE_TIME PASSWORDDEFAULT
16rowsselected.
测试用户:
SQL>selectusername,profilefromdba_userswhereusername='EYGLE';
USERNAME PROFILE
--------------------------------------------------
EYGLE DEFAULT
修改eygle用户的PROFILE使用新建的PROFILE:
SQL>alterusereygleprofilekillidle;
Useraltered.
SQL>selectusername,profilefromdba_userswhereusername='EYGLE';
USERNAME PROFILE
--------------------------------------------------
EYGLE KILLIDLE
进行连接测试:
[oracle@test126admin]$sqlplus eygle/eygle@eygle
SQL*Plus:
Release10.2.0.1.0-ProductiononFriOct1308:
07:
132006
Copyright(c)1982,2005,Oracle. Allrightsreserved.
Connectedto:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioningandDataMiningoptions
SQL>selectusername,profilefromdba_userswhereusername='EYGLE';
USERNAME PROFILE
------------------------------------------------------------
EYGLE KILLIDLE
当IDLE超过限制时间时,连接会被断开:
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual;
TO_CHAR(SYSDATE,'YY
-------------------
2006-10-1308:
08:
41
SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual;
selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual
*
ERRORatline1:
ORA-02396:
exceededmaximumidletime,pleaseconnectagain
1.sqlplus/nolog
2.打开sqlplus
3.
4.
5.connect system/bianqiwei@orcltns assysdba
6.使用具有dba权限得用户登陆oracle
7.
8.
9.showparameterresource_limit
10.显示资源限定是否开启,value为true是开启,为false是关闭
11.
12.
13.altersystemsetresource_limit=true
14.如果未开启,则使用此命令开启资源限定功能
15.
16.
17.createprofileprofileNamelimitconnect_time60idle_time30
18.创建profile文件,profileName任意起,connect_time设置连接超过多少分钟后强制释放,idle_time设置连续不活动的会话超过多少分钟后强制释放
19.
20.alteruseroracleUserprofileprofileName
21.将profile文件作用于指定用户
Oraclesession连接数和inactive的问题记录oracle学习2009-03-1015:
42:
37阅读317评论0 字号:
大中小订阅.
从上周起,服务器Oracle数据库出现问题,用不到半天,就会报maxsession(150)的问题,肯定是数据库的会话超过最大数了。
由于服务器跑的是文件传输应用,占用的请求和会话肯定很大,因此用户数不大就已经让oracle的会话数达到最大值。
处理方式不外乎两种:
扩大oracle最大session数以及清除inactive会话,当然还有,就是从数据库连接池和程序bug上面下手。
从各处收集了一些查看当前会话的语句,记录一下:
1.selectcount(*)fromv$session;
selectcount(*)fromv$process;
查看当前总会话数和进程数,这两个视图就是跟会话及进程有关的重要视图啦,信息都是从这里面取的。
2.查询那些应用的连接数此时是多少
select b.MACHINE,b.PROGRAM,count(*)fromv$processa,v$sessionbwherea.ADDR=b.PADDRand b.USERNAMEisnotnull groupby b.MACHINE ,b.PROGRAMorderbycount(*)desc;
3.查询是否有死锁
select*fromv$locked_object;
如果查询结果为norowsselected,说明数据库中没有死锁。
否则说明数据库中存在死锁。
接下来说明一下会话的状态:
1.active处于此状态的会话,表示正在执行,处于活动状态。
2.killed处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。
还有一点就是,killed的状态一般会持续较长时间,而且用windows下的工具pl/sqldeveloper来kill掉,是不管用的,要用命令:
altersystemkillsession'sid,serial#';
3.inactive处于此状态的会话表示不是正在执行的,比如select语句已经完成。
我一开始以为,只要是inactive状态的会话,就是该杀,为什么不释放呢。
其实,inactive对数据库本身没有什么影响,但是如果程序没有及时commit,那么就会造成占用过多会话。
解决inactive的方法最好的就是在oracle中直接设置超时时间,也是有两种方法,区别暂时还不清楚:
1.修改sqlnet.ora文件,新增expire_time=x(单位是分钟)
我的sqlnet.ora位置在D:
/oracle/ora92/network/admin
2.通过ALTERPROFILEDEFAULTLIMITIDLE_TIME10;命令修改,记得重启下oracle。
ORACLE中的SESSION和PROCESSJAVA2009-07-1414:
10:
51阅读233评论2 字号:
大中小订阅.
修改ORACLE中的SESSION和PROCESS
会话sessions和进程pocesses的关系
一个process可以有0个、1个或者多个session,一个session也可以存在若干个process中,并行同样是一个session对应一个process,主session是coordinatorsession,每个parallelprocess同样会对应数据库里一个单独的session。
可以从v$px_session和v$session中验证这点。
连接connects,会话sessions和进程pocesses的关系
每个sqllogin称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,一个会话对应一个服务器进程(process),如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。
Oracle的sessions和processes的数量关系是:
sessions=1.1*processes+5
下面我们用两种方法修改PROCESS的最大值
一、通过OracleEnterpriseManagerConsole在图形化管理器中修改
以系统管理员的身份登入,进入界面数据库的例程-配置-一般信息-所有初始化参数,修改processes的值
二、在SQLPLUS中修改
以DBA权限登录,修改PROCESS的值(SESSION的值会跟着改);创建pfile;重新启动数据库。
输入的SQL命令如下,回显信息省略了
SQL>connectsys/sysassysdba
SQL>altersystemsetprocesses=400scope=spfile;
SQL>createpfilefromspfile;
SQL>shutdownimmediate;
SQL>startup
Oracle中Killsession的研究Oracle2009-10-2110:
07:
46阅读32评论0 字号:
大中小订阅.
我们知道,在Oracle数据库中,可以通过killsession的方式来终止一个进程,其基本语法结构为:
altersystemkillsession'sid,serial#';
被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.
我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session
的paddr都被更改为相同的进程地址:
SQL>selectsaddr,sid,serial#,paddr,username,statusfromv$sessionwhereusernameisnotnull;
SADDR SID SERIAL#PADDR USERNAME STATUS
--------------------------------------------------------------------------
542E0E6C 11 314542B70E8EYGLE INACTIVE
542E5044 18 662542B6D38SYS ACTIVE
SQL>altersystemkillsession'11,314';
Systemaltered.
SQL>selectsaddr,sid,serial#,paddr,username,statusfromv$sessionwhereusernameisnotnull;
SADDR SID SERIAL#PADDR USERNAME STATUS
-------------------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 连接 过多 清理 机制