ORACLE利用事务和封锁机制提供数据并发存取和数据完整性,在一事务内由语句获取的全部封锁在事务期间被保持,直至该事务提交或回滚时被释放。对于用ORACLE7数据库服务器构造的较大规模的企业级客户/服务器应用系统,众多的客户端由于各种各样的原因(硬件故障、意外掉电等等)难免造成用户会话的意外中止,而ORACLE本身不主动清除这些垃圾会话(session),如果这些会话(session)恰好在当前事务期间对数据库对象(表、视图等)加了锁,往往造成其他客户端的用户不能正常继续工作。如何及时清除这些垃圾会话(session)、释放所占用的资源,这正是本文所要讨论的内容。2具体方法ORACLE数据库具有审计其内部所有发生的活动的能力,每一个企图与数据库连接的活动都可以被审计(Audit),即所谓的登录审计(LoginAudit)。
为开化等地区用户提供了全套网页设计制作服务,及开化网站建设行业解决方案。主营业务为做网站、网站制作、开化网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
sqlplus环境下 alter system kill session 'sid,serial#';
如果不行的话在操作系统下操作:
windows: orakill 实例名 spid
linux: kill -9 spid
举个例子
通过session id (SID) 找到系统进程号 然后kill 进程
SQL select spid from v$process where addr=(select paddr from v$session where rownum=1 and sid=(select userenv('SID') from dual));
SPID
------------------------
12135
spid 系统进程号
SQL ho kill -9 12135
kill 掉这个进程 就完了
SQL select sysdate from dual;
select sysdate from dual
*
第 1 行出现错误:
ORA-03135: 连接失去联系
进程 ID: 12135
会话 ID: 65 序列号: 19533
在Oracle中,可以用kill session来终止一个会话进程,其基本语法结构为:
alter system kill session 'sid,serial' ;
ORACLE官网对于ora-00031异常给出的解释:
ORA-00031 session marked for killCause: The session specified in an ALTER SYSTEMKILL SESSION commandcannot be killed immediately because the session isinvolved in anon-interruptible operation (for example, rollingback a transaction or beingblocked by a network operation). The session hasbeen marked to be killed assoon as possible after the current operation is done.Action: No action is required for the session to bekilled, but further executionsof the ALTER SYSTEM KILL SESSION command onthis session may cause thesession to be killed soone
意思是说当前你的这个session正在进行回滚等正在运行状态的操作,所以不能马上删除该会话。系统会在该session的当前操作完成后自动删除这个session。所以,你可以等等。应该就没问题啦
你可以考虑使用在操作系统层面来杀掉客户端会话的连接进程,这样资源马上就可以释放掉,如果只是在数据库级别的话,即便是管理员杀掉会话,那么v$session里面也不过是显示killed状态,而不是真正的释放掉,同时如果此时实际的连接数量达到参数session设定数量上线的话,新的连接将会报错无法连接,直到资源释放才可以。