--如何快速的杀掉Oracle的Session
/*==============================================================================
本资料经网络收集整理,已经验证,但对使用资料所造成的后果及影响不负任何责任
==============================================================================*/
--1.如何查看session级的等待事件?
/*==============================================================================
当我们对数据库的性能进行调整时,一个最重要的参考指标就是系统等待事 件。
$system_event,v$session_event,v$session_wait这三个视图里记录的就是系统级和session级的等待 事件,
通过查询这些视图你可以发现数据库的一些操作到底在等待什么?是磁盘I/O,缓冲区忙,还是插锁等等。
通过如下sql你可以查询你的每个应用程序到底在等待什么,从而针对这些信息对数据库的性能进行调整。
==============================================================================*/
Select s.username,s.program,s.status,se.event,se.total_waits,se.total_timeouts,se.time_waited,se.average_wait from v$session s, v$session_event se Where s.sid=se.sid And se.event not like 'SQl*Net%' And s.status ='ACTIVE' And s.username is not null
/*==============================================================================
2.oracle中查询被锁的表并释放session
==============================================================================*/
SELECT A.OWNER,
A.OBJECT_NAME,
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID,
B.ORACLE_USERNAME,
B.OS_USER_NAME,
B.PROCESS,
B.LOCKED_MODE,
C.MACHINE,
C.STATUS,
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM
FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, SYS.GV_$SESSION C
WHERE (A.OBJECT_ID = B.OBJECT_ID)
AND (B.PROCESS = C.PROCESS)
ORDER BY 1, 2
--释放session Sql:
alter system kill session 'sid, serial#'
alter system kill session '30, 2412';
/*==============================================================================
如:
alter system kill session '379, 21132'
alter system kill session '374, 6938'
==============================================================================*/
/*==============================================================================
3.查看占用系统io较大的session
==============================================================================*/
SELECT se.sid,
se.serial#,
pr.SPID,
se.username,
se.status,
se.terminal,
se.program,
se.MODULE,
se.sql_address,
st.event,
st.p1text,
si.physical_reads,
si.block_changes
FROM v$session se, v$session_wait st, v$sess_io si, v$process pr
WHERE st.sid = se.sid AND st.sid = si.sid
AND se.PADDR = pr.ADDR
AND se.sid > 6 AND st.wait_time = 0
AND st.event NOT LIKE '%SQL%'
ORDER BY physical_reads DESC
/*==============================================================================
4.找出耗cpu较多的session
==============================================================================*/
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
/*==============================================================================
5.查询session被锁的sql可以用一下语句
==============================================================================*/
select sys.v_$session.osuser,sys.v_$session.machine,v$lock.sid,
sys.v_$session.serial#,
decode(v$lock.type,
'MR', 'Media Recovery',
'RT','Redo Thread',
'UN','User Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL User Lock',
'DX', 'Distributed Xaction',
'CF', 'Control File',
'IS', 'Instance State',
'FS', 'File Set',
'IR', 'Instance Recovery',
'ST', 'Disk Space Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalida-tion',
'LS', 'Log Start or Switch',
'RW', 'Row Wait',
'SQ', 'Sequence Number',
'TE', 'Extend Table',
'TT', 'Temp Table',
'Unknown') LockType,
rtrim(object_type) || ' ' || rtrim(owner) || '.' || object_name object_name,
decode(lmode, 0, 'None',
1, 'Null',
2, 'Row-S',
3, 'Row-X',
4, 'Share',
5, 'S/Row-X',
6, 'Exclusive', 'Unknown') LockMode,
decode(request, 0, 'None',
1, 'Null',
2, 'Row-S',
3, 'Row-X',
4, 'Share',
5, 'S/Row-X',
6, 'Exclusive', 'Unknown') RequestMode,
ctime, block b
from v$lock, all_objects, sys.v_$session
where v$Lock.sid > 6 and sys.v_$session.sid = v$lock.sid
and v$lock.id1 = all_objects.object_id;
/*==============================================================================
OS一级for kill 处理Oracle中杀不掉的锁
如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,
那么可以在os一级再杀死相应
==============================================================================*/
--1 查询session被锁的sql,简要查询,得到SID
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
--2 使用alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)进行释放
alter system kill session '30, 2412'
--3 执行下面的语句获得进程(线程)号,sid为第一步查询出的sid号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=30;
/*==============================================================================
4.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345
==============================================================================*/
分享到:
相关推荐
### Oracle 如何杀掉带锁的进程 在Oracle数据库管理中,经常会出现因某些进程锁定资源而导致其他操作无法正常执行的情况。此时,就需要采取措施来杀掉这些带锁的进程,以确保系统的正常运行。本文将详细介绍如何在...
- `<thread>`是要杀掉的线程号,即第三步查询出的`spid`。 - 示例命令: ```bash c:> orakill orcl 12345 ``` 通过以上步骤,我们可以有效地处理Oracle数据库中难以解除的锁定情况。这些方法不仅适用于日常...
### 清除Oracle中长时间持锁的Session #### 背景介绍 在Oracle数据库管理过程中,有时会遇到一些长时间占用资源的进程,这些进程可能会导致数据库性能下降甚至某些操作无法执行。通常情况下,如果一个session的状态...
在日常的数据库管理和维护工作中,我们常常会遇到表或数据对象被锁定的情况,尤其是在使用PL/SQL时。当一个表被锁定后,其他的用户或进程将无法对该表执行某些操作,比如更新、删除等,这可能会严重影响到业务的正常...
1. 查找被锁定的表:使用以下 SQL 语句可以查找被锁定的表: ```sql select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; ``` 2. ...
一些ORACLE中的进程被杀掉后,状态被置为killed,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那是在ORACLE中杀不掉的,在OS一级再杀。 1.下面的语句用来查询...
本篇将详细介绍如何在Oracle环境中查看被锁的表、被锁的进程,以及如何安全地杀掉这些进程。 1. **查看被锁的表** 使用以下SQL查询可以列出当前被锁的表及其相关信息: ```sql SELECT p.spid, a.serial#, c....
在Windows环境下,可以使用如下SQL语句生成杀掉特定会话(例如 SID=104)的命令: ```sql SELECT 'orakill ' || (SELECT instance_name FROM v$instance) || ' ' || p.spid || ';' killsql FROM v$process p, v$...
但有时可能需要手动干预,通过`DBA_ADVICE`视图查看死锁信息,并采取相应措施,比如杀掉其中一个会话。 5. **预防表锁和死锁** - 使用更细粒度的锁定,如行级锁定,减少冲突的可能性。 - 优化事务设计,使其尽可能...
在这个例子中,'23, 1647'是需要被杀掉的session的标识。 然而,执行`ALTER SYSTEM KILL SESSION`可能会导致未提交的事务丢失,因此在使用前应谨慎。在可能的情况下,尝试通过应用程序或用户交互来正常结束session...
**杀掉特定会话:** 如果发现某个会话长时间占用表锁导致其他操作无法执行,可以通过以下命令杀死该会话: ```sql ALTER SYSTEM KILL SESSION '286,2184'; ``` 这里 `286,2184` 是会话ID及其序列号。 **检查会话...
批量删除会话时,可以编写PL/SQL代码,利用游标遍历`gv$session`视图,找到要终止的会话。以下是一个示例: ```sql DECLARE CURSOR mycur IS SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program...
如果在操作系统层面遇到问题,可以使用 `kill -9 spid` 杀掉对应的进程。 3. **账户锁定**: - 如果用户账户因密码错误多次输入而被锁定,可以使用 `ALTER USER` 语句来解锁,如 `ALTER USER user_name ACCOUNT ...
- 如果通过上述方法仍然无法解锁,可以在操作系统层面杀掉Oracle的进程: ```bash kill -9 spid ``` 其中`spid`是Oracle进程的ID。 #### 三、用户和权限管理 ##### 3.1 查看所有用户 Oracle提供了多个视图来查询...
7. 如果杀掉 Session 不成功,需要在操作系统下终止进程。 阻塞情形 B 阻塞情形 B 是指由于库缓存锁引起的阻塞。解决方法如下: 1. 查询数据库中有大量的 `library cache pin` 等待。 2. 分析解决过程,检查是否...
Oracle 锁机制详解 Oracle 锁机制是 Oracle 数据库管理系统中的一种机制,用来控制对数据库资源的...如果发现长期存在的锁,可以使用以下 SQL 语句杀掉该锁: ```sql alter system kill session 'sid,serial#'; ```
ora-00031:session marked for kill处理oracle中杀不掉的锁一些ORACLE中的进程被杀掉后,状态被置为”killed”,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那...
通过查询`resource_type='OBJECT'`,你可以找出被锁定的对象(表)以及持有这些锁的`request_session_id`(SPID,即进程ID)。 2. **确定死锁源头**: - 一旦找到SPID,可以通过`sp_who2`系统存储过程获取更多关于...
3. **决策处理**:根据业务需求,决定是等待锁定释放,还是手动解锁(如杀掉会话),或者优化SQL避免锁定。 4. **预防措施**:优化事务设计,减少锁定时间,使用更合适的事务隔离级别,考虑使用行版本控制等技术降低...