解决ORACLE数据库中被锁的进程Linux宝库%E2r@|~9Z&b4J
最近开发遇到一个问题,由于数据量比较大,所以执行一条SQL语句可能死住,数据库忙的话,就会将当前的数据库进程锁住,而就执行这样的一条SQL语句就死住,select * from ac20,这个表里面的数据量达到了2亿3千万条数据,所以,写存储过程的时候,就是尽量避开这个表,通过别的方式去取相应的数据.Linux宝库MLfAC;{&BI
好了,怎么去解决被锁住的数据库进程?如果在WINDOWS下的可以打开PL/SQL,简单的方法就是在TOOLS菜单中打开SESSION,就可以看到你登录在你所在的数据库服务器所有SESSION,但这样只能看到各个数据库进程所在的状态,但看不到由于什么原因导致被锁。Linux宝库'o ^/[0[6Vc#d
下面通过下列的命令去完成,这些命令同时也适用于LINUX系统下的ORACLE,由于本人现在的操作系统是WINDOWS,暂时就在WINDOWS下去完成吧!
he\^-e']0注:所有的操作都是一个ORACLE客户端,开发也不可能在数据库服务器上开发。只要你具有杀数据库进程的一个权限就OK了。Linux宝库Yc8M|(g
一)select * from v$session ;
3k3x8S[RUVI0可以看到所有当前的SESSIONLinux宝库_.PB'_3L
二)select * from v$lock;
"mz6Cv_+y9N0显示当前被锁的数据库进程Linux宝库'C(}9H4r1^
y%P(y2@`
例如:我们看一下下面的一条被锁的数据库进程。Linux宝库N qmq#t.f
SELECT * FROM V$LOCK WHERE SID IN (SELECT SID FROM V$SESSION WHERE USERNAME='TJCS' ) ;
!c6] b!s:fg1Vo0 Linux宝库?@0b0Pq
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
4AF3w2}-l T T0---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
_HF e2?_Dj
n?007000002044C2730 07000002044C2750 86 TX 188231 3714 0 4 173912 0
)rmZE.m
G1|LT0三) select * from dba_objects where object_id = ‘a’;Linux宝库5t'yw {ZM
其中:a 代表从第二步中得到的一个ID1Linux宝库5Dx3Q%r R
select * from dba_objects where object_id = '188231';Linux宝库
dZ-_v3l
Kq-h@or3kN.|T0OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARY
zAhZq![U5D |0------------------------------ -------------------------------------------------------------------------------- ------------------------------ ---------- -------------- ------------------- ----------- ------------- ------------------- ------- --------- --------- ---------Linux宝库w:j7gFO&h+dw
TJCS RC01_1_1 188231 188231 TABLE 2007-11-26 2007-12-6 9:1 2007-12-06:09:17:38 VALID N N N
dcP$Tb$P,s!m0我们可以看出,是操作表RC_01_1_1这个表出的问题。Linux宝库(q#w
R
rR@
四) 现在让我们来把改进程杀掉。Linux宝库9ZvQ'bK5v j
Alter system kill session ‘a,b’
t&fA7Rnv0其中:a,代表select * from v$session 得到的SID;b则为SERIAL#
;]#S,HyMr0Select * from v$session where sid=’ 86’;
M/Z9nphJr0SADDR SID SERIAL# AUDSID ………..Linux宝库7n2E)l-E1b0~%LQ$M
――――――――――――――――――――――――――――――Linux宝库wSJ2Y/Vx
q@
070000020237C6D0 86 4307 4453119 ………Linux宝库6L%?B'sVg0R
Alter system kill session ‘86, 4307’;Linux宝库6oDj:a+~*wu
提示已被杀除。。。Linux宝库 p-{}oz~.Q
上述方法可以找到相应的原因所导致和相应的解决办法。
}8@I4{)VpfR0
v%M)r)q!E-Q1J#ss ICh?Z0更多原创文章欢迎访问俺的博客总站:Linux宝库"K!~'M r%r&W
http://westsoftware.blog.163.com
Emt`YuCO0 Linux宝库*w.Q!r%d%HG