解决Oracle视图被锁住的问题

会产生这种视力被锁定的现象是删除某个对象的时候进程会死掉,创建的时候也是一样。

我同事解释的可能原因是:
在创建对象的时候没有创建完就被关掉了,或者就是没有执行完。然后造成线程锁定。

解决的办法:

1.找出等待事件的原因
select event,p1,p2,sid from v$session_wait where event not like 'SQL%' and event not like 'rdbms%';
2.找出锁住的进程
select object_id,session_id,locked_mode from v$locked_object;
3.找出锁住的进程的操作系统进程
select spid from v$process where addr=(select paddr from v$session where sid=19);(这个19表示被锁定的SID)
4.在操作系统上删除进程
orakill eoffice 2768(第一个参数据是数据库的SID  第二个参数是进程ID,这个数字就是上面取到的进程ID,这个是在Dos命令窗口下操作)


下面是一个操作实例
首先先Drop 相关的锁定的对象如Drop View vw_wf_CritCondition,然后结束PL/SQL Dev 再开一次才能执行下面的操作。

SQL> select event,p1,p2,sid from v$session_wait where event not like 'SQL%' and event not like 'rdbms%';

EVENT                                                                    P1         P2        SID
---------------------------------------------------------------- ---------- ---------- ----------
null event                                                       1413697536          1         18
null event                                                                1      95552         22
pmon timer                                                              300          0          1
smon timer                                                              300          0          5
library cache lock                                                763239564  792075180         23   (这里表示有一个库被锁掉了。)
wakeup time manager                                                       0          0          8

6 rows selected

SQL> select object_id,session_id,locked_mode from v$locked_object;

 OBJECT_ID SESSION_ID LOCKED_MODE
---------- ---------- -----------
        77         22           3
        69         22           3
        70         22           3
       316         22           3
       314         22           3
       356         22           3
        68         22           3
        72         22           3
        73         22           3
        74         22           3
        75         22           3

11 rows selected

SQL> select spid from v$process where addr=(select paddr from v$session where sid=22);

SPID
------------
3348

在Dos操作,而且只能在安装数据的本机操作
orakill eoffice 3348

posted @ 2006-07-28 08:27  小草  阅读(2747)  评论(1编辑  收藏  举报
Google+