通过Kill Session杀掉Oracle中会话或死锁的方式
一.v$session,v$process,v$locked_object三张表的一些常见操作:
1.查看当前总会话数和进程数
select count(*) from v$session; select count(*) from v$process;
2.查询那些应用的连接数此时是多少
select b.MACHINE, b.PROGRAM, count(*) from v$process a, v$session b where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE, b.PROGRAM order by count(*) desc;
3.查询是否有死锁:
select * from v$locked_object;
如果查询结果为空,说明数据库中没有死锁。
实例:
在pl/sql中执行 [delete from news where id = 1;] ,但是没有进行commit。
此时,执行 [select * from v$locked_object;],会出现如下结果:
二.会话状态的说明:
首先,查询Session中的sid,serial#,username,status,machine:
select saddr, sid, serial#, paddr, username, status, machine from v$session where username is not null;
1.active 处于此状态的会话,表示正在执行,处于活动状态。
2.killed 处于此状态的会话,表示出现了错误,正在回滚,当然,也是占用系统资源的。还有一点就是,
killed的状态一般会持续较长时间,而且用windows下的工具pl/sql developer来kill掉,是不管用的,
要用命令:alter system kill session 'sid,serial#' ;
3.inactive 处于此状态的会话表示不是正在执行的,比如select语句已经完成。(我一开始以为,
只要是inactive状态的会话,就是该杀,为什么不释放呢。)其实,inactive对数据库本身没有什么影响,
但是如果程序没有及时commit,那么就会造成占用过多会话。解决inactive的方法最好的就是在oracle中
直接设置超时时间,也是有两种方法,区别暂时还不清楚:
(1).修改sqlnet.ora文件,新增expire_time=x(单位是分钟)
我的sqlnet.ora位置在D:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
(2).通过ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,记得重启下oracle。
三.查找并kill死锁的session:
1.查找:(注:若没有死锁的session,查询记录将为空。)
(1).查询v$locked_object表
select * from v$locked_object;
(2).以Oralce管理员权限用户登录Oracle数据,查询到被锁的对象
SELECT a.object_id, a.session_id, b.object_name, c.* FROM v$locked_object a, dba_objects b, v$session c WHERE a.object_id = b.object_id AND a.SESSION_ID = c.sid(+);
2.Kill Session:
alter system kill session 'sid, serial#';
注:
有时alter system kill session 'sid,serial#';并不能彻底的杀死会话。
如果有ora-00031错误,则在后面加immediate;
alter system kill session '29,5497' immediate;
例如:
上面查出来的一条记录的sid是149, serial#为4153,就执行以下的语句:
alter system kill session '149,4153' ;
3.如果要一次性杀死多个会话,一个一个填写sid和serial#十分的繁琐,应该在查询被锁对象的同时拼凑出多条的杀会话语句,以分号分隔,一起复制下来,然后就可以批量的执行了。
SELECT 'alter system kill session ''' || c.sid || '' || ',' || c.serial# || ''';', a.object_id, a.session_id, b.object_name, c.* FROM v$locked_object a, dba_objects b, v$session c WHERE a.object_id = b.object_id AND a.SESSION_ID = c.sid(+) AND schemaname = 'Unmi' ORDER BY logon_time
相关推荐
在 Oracle 中,死锁是指两个或多个会话在等待对方释放资源,从而导致互相阻塞的情况。死锁可能会导致数据库性能下降,甚至崩溃。因此,解决死锁问题是非常重要的。 解决 Oracle 杀死死锁进程的步骤: 1. 查找被...
在Oracle数据库管理中,处理死锁进程和释放状态为killed的session是一项关键技能,尤其对于维护数据库性能和稳定性至关重要。以下将详细阐述如何通过一系列步骤有效地关闭Oracle死锁进程,以及如何释放状态为killed...
**Oracle Kill Session**是指在Oracle数据库中终止某个或某些会话(session)的操作。这项操作通常由DBA(数据库管理员)执行,用于解决因长时间运行的查询、锁定资源等问题导致的应用程序或系统性能下降的情况。通过...
Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle数据库中,死锁可能是由多种...
需要注意的是,使用`ALTER SYSTEM KILL SESSION`命令后,被终止的会话中的所有未提交的事务都将被回滚,因此在实际操作之前,应确保了解这些操作可能带来的后果。 #### 示例分析 接下来通过一个简单的例子来说明...
### Oracle解锁与死锁解析 #### 一、Oracle解锁与死锁概述 在Oracle数据库管理过程中,解锁与处理死锁是...通过上述方法和技术,可以有效地管理和解决Oracle数据库中的解锁与死锁问题,从而提高系统的稳定性和效率。
- **通过Oracle命令**:使用`ALTER SYSTEM KILL SESSION`命令直接杀死Oracle会话。 ```sql ALTER SYSTEM KILL SESSION 'SID, SERIAL#'; ``` 其中,`SID`和`SERIAL#`分别是从步骤3中获得的值。 - **通过操作系统...
Oracle数据库在操作过程中,有时会遇到ORA-00031错误,这个错误提示是“会话标记为kill(session marked for kill)”。这通常发生在使用ALTER SYSTEM KILL SESSION命令企图终止某个会话时,但由于会话正在执行无法...
在Oracle数据库中,当两个或多个会话互相等待对方释放资源时,就会发生死锁现象。这种情况通常发生在事务处理过程中,其中一个会话锁定了某些数据对象进行读写操作,而另一个会锁定了其他数据对象进行读写操作,当...
- 使用`ALTER SYSTEM KILL SESSION`命令可以直接杀死导致死锁的会话。例如: ```sql ALTER SYSTEM KILL SESSION '97,12441'; ``` - 其中`97`是会话ID(`SID`),`12441`是系统进程ID(`SPID`)。 2. **查看锁定...
在Oracle数据库管理中,死锁是一个常见的问题,它通常发生在两个或多个事务互相等待对方释放资源的情况。当这种情况发生时,可能会导致应用程序响应变慢甚至完全停止运行。因此,了解如何有效地解决Oracle死锁问题至...
1. **手动干预**:通过SQL命令`ALTER SYSTEM KILL SESSION 'sid,serial#'`杀死其中一个会话,打破死锁。但需谨慎使用,避免数据一致性问题。 2. **调整应用程序逻辑**:重新设计事务处理流程,确保资源锁定的顺序...
Oracle数据库在运行过程中,可能会遇到一种情况,那就是“表死锁”,这会导致多个事务相互等待对方释放资源,从而无法继续执行。死锁不仅影响数据库的正常运行,还可能导致数据一致性问题。本文将深入探讨Oracle表...
一旦确认了导致死锁的会话,可以通过`ALTER SYSTEM KILL SESSION`命令来杀死这些会话,从而解除死锁。命令格式如下: ```sql ALTER SYSTEM KILL SESSION ',<SERIAL#>'; ``` 例如,如果需要杀死SID为189且序列号为...
在Oracle数据库系统中,死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象。当这种情况发生时,如果没有外部干预,这些事务将无法继续执行,因为它们都在等待对方释放资源。本篇将详细介绍...
这可以通过查询V$SESSION视图来找到具体的会话信息,然后使用ALTER SYSTEM KILL SESSION命令来终止特定的会话。 例如,首先找到造成死锁的会话信息: ```sql SELECT sid, serial# FROM v$session WHERE sid=&sid; ...
但有时可能需要手动干预,通过`DBA_ADVICE`视图查看死锁信息,并采取相应措施,比如杀掉其中一个会话。 5. **预防表锁和死锁** - 使用更细粒度的锁定,如行级锁定,减少冲突的可能性。 - 优化事务设计,使其尽可能...
在数据库系统中,特别是在Oracle这样的大型关系型数据库管理系统中,死锁是常见的问题之一。当两个或多个事务互相等待对方释放资源时,就会发生死锁。这种情况下,所有涉及的事务都将处于无限等待状态,从而导致应用...