数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
library cache lock 的解决案例

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 下午,业务人员报告,执行任何和zzss03201281cs_no表有关的操作都会hang住,包括desc zzss03201281cs_no,也会hang在那里

第一感觉是锁了,于是,我看看锁

SQL> select * from v$lock where block=1;

no rows selected

SQL>
SQL> select * from gv$lock where block=1;

no rows selected

SQL>

 

再看看等待事件:

SQL> col event for a30
SQL> l
  1* select event,p1,p2,sid from v$session_wait where event='library cache lock'
SQL> /

EVENT                                  P1         P2        SID
------------------------------ ---------- ---------- ----------
library cache lock             1.3835E+19 1.3835E+19         32

SQL> /

EVENT                                  P1         P2        SID
------------------------------ ---------- ---------- ----------
library cache lock             1.3835E+19 1.3835E+19         32

SQL> /

EVENT                                  P1         P2        SID
------------------------------ ---------- ---------- ----------
library cache lock             1.3835E+19 1.3835E+19         32

。。。

 

奇怪,怎么这么多 library cache lock  ?

SQL> show user
USER is "SYS"
SQL> exec dbms_system.set_ev(32,27506,10046,12,'');

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.10
SQL> l
  1  SELECT    d.VALUE
  2         || '/'
  3         || LOWER (RTRIM (i.INSTANCE, CHR (0)))
  4         || '_ora_'
  5         || p.spid
  6         || '.trc' trace_file_name
  7    FROM (SELECT p.spid
  8            FROM v$mystat m, v$session s, v$process p
  9           WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
 10         (SELECT t.INSTANCE
 11            FROM v$thread t, v$parameter v
 12           WHERE v.NAME = 'thread'
 13             AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
 14         (SELECT VALUE
 15            FROM v$parameter
 16*          WHERE NAME = 'user_dump_dest') d
SQL> /

TRACE_FILE_NAME
--------------------------------------------------------------------------------
/ora9i/app/oracle/admin/csmisc/udump/csmisc2_ora_2708.trc

Elapsed: 00:00:00.10
SQL>

 

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

    XIDUSN  OBJECT_ID SESSION_ID LOCKED_MODE
---------- ---------- ---------- -----------
        14      35202         31           3
        15         18         30           3

SQL> col object_name format a30
SQL> select owner,object_name,status from dba_objects where object_id=35202;

OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
STATUS
-------
SYS
PLAN_TABLE
VALID


SQL>

这个对象显然不是我们关注的。


SQL> l
/  1* select owner,object_name,status from dba_objects where object_id=18
SQL>

OWNER                          OBJECT_NAME                    STATUS
------------------------------ ------------------------------ -------
SYS                            OBJ$                           VALID

就是这个对象搞得,估计是开发人员异常退出一些进程

SQL> c/18/30
  1* select serial#,username,command,lockwait,status,schemaname,osuser,machine,terminal,program,module from v$session where sid=30
SQL> /

   SERIAL# USERNAME                          COMMAND LOCKWAIT         STATUS
---------- ------------------------------ ---------- ---------------- --------
SCHEMANAME                     OSUSER
------------------------------ ------------------------------
MACHINE
----------------------------------------------------------------
TERMINAL                       PROGRAM
------------------------------ ------------------------------------------------
MODULE
------------------------------------------------
     17921 PUBUSER                                 0                  ACTIVE
PUBUSER                        report16
cs_dc02

   SERIAL# USERNAME                          COMMAND LOCKWAIT         STATUS
---------- ------------------------------ ---------- ---------------- --------
SCHEMANAME                     OSUSER
------------------------------ ------------------------------
MACHINE
----------------------------------------------------------------
TERMINAL                       PROGRAM
------------------------------ ------------------------------------------------
MODULE
------------------------------------------------
                               sqlplus@cs_dc02 (TNS V1-V3)
SQL*Plus


SQL> select b.username username, b.terminal terminal,b.program program,b.spid
  2  from v$session a, v$process b
where a.PADDR=b.ADDR and a.sid ='&sid';
  3  Enter value for sid: 30
old   3: where a.PADDR=b.ADDR and a.sid ='&sid'
new   3: where a.PADDR=b.ADDR and a.sid ='30'

USERNAME        TERMINAL
--------------- ------------------------------
PROGRAM                                          SPID
------------------------------------------------ ------------
ora9i           UNKNOWN
oracle@cs_dc02 (TNS V1-V3)                       835

很显然,是由于report16用户执行了某些DDL操作,然后,异常退出,造成系统的锁(估计和bug有关,有待考证)
SQL> host
ora9i@cs_dc02:/ora9i/app/oracle/product/920/rdbms/admin > ps -ef | grep 835
   ora9i  4619  4617  1 14:48:18 pts/te    0:00 grep 835
   ora9i   835     1  0  Jan  5  ?         0:01 oraclecsmisc2 (LOCAL=NO)
ora9i@cs_dc02:/ora9i/app/oracle/product/920/rdbms/admin > kill 835
ora9i@cs_dc02:/ora9i/app/oracle/product/920/rdbms/admin > exit

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

    XIDUSN  OBJECT_ID SESSION_ID LOCKED_MODE
---------- ---------- ---------- -----------
        14      35202         31           3

SQL>

kill掉这个进程后,问题解决了。(遗憾的是,忘了看看这个家伙执行的sql了,呵呵)
SQL> desc zzss03201281cs_no
ERROR:
ORA-04043: object zzss03201281cs_no does not exist


SQL> desc zzss03201281cs_no
ERROR:
ORA-04043: object zzss03201281cs_no does not exist


SQL>

SQL> exec dbms_system.set_ev(32,27506,0,0,'');

PL/SQL procedure successfully completed.

SQL>

查看trace文件,:

果然大量的wait:

WAIT #1: nam='library cache lock' ela= 316 p1=-4611686013647472824 p2=-4611686013691747544 p3=1301
WAIT #1: nam='library cache lock' ela= 326 p1=-4611686013647472824 p2=-4611686013691747544 p3=1301
WAIT #1: nam='library cache lock' ela= 398 p1=-4611686013647483736 p2=-4611686013691747816 p3=1301
WAIT #1: nam='library cache lock' ela= 552 p1=-4611686013647483736 p2=-4611686013691747816 p3=1301
WAIT #1: nam='library cache lock' ela= 330 p1=-4611686013649700264 p2=-4611686013691715248 p3=1301
WAIT #1: nam='library cache lock' ela= 141 p1=-4611686013649700264 p2=-4611686013691715248 p3=1301
WAIT #1: nam='library cache lock' ela= 223 p1=-4611686013647485472 p2=-4611686013691762016 p3=1301
WAIT #1: nam='library cache lock' ela= 93 p1=-4611686013647485472 p2=-4611686013691762016 p3=1301
WAIT #1: nam='library cache lock' ela= 223 p1=-4611686013595934816 p2=-4611686013642107320 p3=1301

 




 




相关文章

相关软件