解决ORACLE数据库中被锁的进程Linux宝库
e0kg*g2A{-C W8L
最近开发遇到一个问题,由于数据量比较大,所以执行一条SQL语句可能死住,数据库忙的话,就会将当前的数据库进程锁住,而就执行这样的一条SQL语句就死住,select * from ac20,这个表里面的数据量达到了2亿3千万条数据,所以,写存储过程的时候,就是尽量避开这个表,通过别的方式去取相应的数据.
eZ8~^M
D/|$_.V0好了,怎么去解决被锁住的数据库进程?如果在WINDOWS下的可以打开PL/SQL,简单的方法就是在TOOLS菜单中打开SESSION,就可以看到你登录在你所在的数据库服务器所有SESSION,但这样只能看到各个数据库进程所在的状态,但看不到由于什么原因导致被锁。Linux宝库 _V)J&TXOe,{
下面通过下列的命令去完成,这些命令同时也适用于LINUX系统下的ORACLE,由于本人现在的操作系统是WINDOWS,暂时就在WINDOWS下去完成吧!Linux宝库#ARLC^
注:所有的操作都是一个ORACLE客户端,开发也不可能在数据库服务器上开发。只要你具有杀数据库进程的一个权限就OK了。Linux宝库5d3|4^F1v`
一)select * from v$session ;Linux宝库K'Bky0@u? S
L
可以看到所有当前的SESSIONLinux宝库g-p7};R
qL'z@|}
二)select * from v$lock;
v U5tq0}i2h0显示当前被锁的数据库进程
`4[1f#B5U0例如:我们看一下下面的一条被锁的数据库进程。Linux宝库'q-`P$G;Tm$X
SELECT * FROM V$LOCK WHERE SID IN (SELECT SID FROM V$SESSION WHERE USERNAME='TJCS' ) ;Linux宝库_4_f
f4O eo Ik
Linux宝库;P3IW4g*o7se2v
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
VLmPw]I8b8r0---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------Linux宝库~
O(UA;~smB.A%P
07000002044C2730 07000002044C2750 86 TX 188231 3714 0 4 173912 0Linux宝库 {$V.]
I%uQ$b5AV/m
三) select * from dba_objects where object_id = ‘a’;
V7_D!mDa:Gcr0其中:a 代表从第二步中得到的一个ID1
{;Fqn0V N0select * from dba_objects where object_id = '188231';Linux宝库z@wZ*F,gt ~.e
#ce8b(\HZt
A0OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARYLinux宝库6K0r%X v!J
------------------------------ -------------------------------------------------------------------------------- ------------------------------ ---------- -------------- ------------------- ----------- ------------- ------------------- ------- --------- --------- ---------
I'J6n!{ z@)D*t&~0TJCS RC01_1_1 188231 188231 TABLE 2007-11-26 2007-12-6 9:1 2007-12-06:09:17:38 VALID N N NLinux宝库0_4Z9M@w'q'n
我们可以看出,是操作表RC_01_1_1这个表出的问题。Linux宝库#m0V?6O{v\'c2XX
四) 现在让我们来把改进程杀掉。
Hh/I#V4\n2E)za0Alter system kill session ‘a,b’Linux宝库3U.rYq |Ym;cr*E
其中:a,代表select * from v$session 得到的SID;b则为SERIAL#Linux宝库`o#q|:NU-|v-|
Select * from v$session where sid=’ 86’;
#w0[(r
D Ch"[b0SADDR SID SERIAL# AUDSID ………..Linux宝库|RU7C ?Y'b1g
――――――――――――――――――――――――――――――Linux宝库/`&pCp,eU7e
070000020237C6D0 86 4307 4453119 ………Linux宝库9p'D%wCb'Z:RI
Alter system kill session ‘86, 4307’;
{ NtJ X`vdQ j1Ul0提示已被杀除。。。
a'Tg:gS-F0jP0上述方法可以找到相应的原因所导致和相应的解决办法。Linux宝库{;ZBs,iP
Linux宝库P R5q
ITS
ui ?
更多原创文章欢迎访问俺的博客总站:Linux宝库T-B/DE*~'r6?
M I N5c?
http://westsoftware.blog.163.com
'dg'U}
D0 Linux宝库g&Yz#b2xe#r