通过shell脚本查看锁信息

在生产环境维护中,如果碰到较长时间的锁等待,很可能会造成各种可能的问题。我们可以使用如下的脚本来实时监控锁的情况。

sqlplus -S $DB_CONN_STR@$SH_DB_SID < set linesize    160
set pages       100
set feedback    off
set verify      off


set echo on
col object_name format a25
col osuser format a10
col machine format a12
col program format a20
--col object_type format a10
col state format a10
col status format a10
col oracle_username format a12
col sid_serial format a12
col sec_wait format 99999999
col lock_type format a5
col mode_held format a10
set linesize 200
prompt Current Locks
prompt --------------


select ses.sid||','||ses.serial# sid_serial,loc.oracle_username,object_name,
--object_type,
ses.LOGON_TIME,ses.SECONDS_IN_WAIT sec_wait,ses.osuser,ses.machine,ses.program,ses.state,ses.status,
 decode(d.type,
                'MR', 'Media Recovery',
                'RT', 'Redo Thread',
                'UN', 'User Name',
                'TX', 'Transaction',
                'TM', 'DML',
                'UL', 'PL/SQL User Lock',
                'DX', 'Distrib Xaction',
                'CF', 'Control File',
                'IS', 'Instance State',
                'FS', 'File Set',
                'IR', 'Instance Recovery',
                'ST', 'Disk Space Transaction',
                'TS', 'Temp Segment',
                'IV', 'Library Cache Invalidation',
                'LS', 'Log Start or Switch',
                'RW', 'Row Wait',
                'SQ', 'Sequence Number',
                'TE', 'Extend Table',
                'TT', 'Temp Table',
                d.type) lock_type,
         decode(d.lmode,
                0, 'None',           /* Mon Lock equivalent */
                1, 'Null',           /* N */
                2, 'Row-S (SS)',     /* L */
                3, 'Row-X (SX)',     /* R */
                4, 'Share',          /* S */
                5, 'S/Row-X (SSX)',  /* C */
                6, 'Exclusive',      /* X */
                to_char(d.lmode)) mode_held
 from v\$locked_object loc,v\$session ses,dba_objects obj,v\$lock d
 where loc.object_id=obj.object_id 
      and loc.session_id=ses.sid
      and obj.object_id=d.id1
      and ses.sid=d.sid
      order by oracle_username,seconds_in_wait desc
;
set head off 
SELECT 'There are also '||count(*)||' transaction locks'
FROM v\$transaction_enqueue
;
prompt
prompt Blocking Session Details

select  BLOCKING_SESSION  ||'    IS BLOCKING    '||sid||','||serial# from v\$session where blocking_session is not null;
exit
EOF

脚本运行的结果如下:
Current Locks
-------------
SID_SERIAL   ORACLE_USERN OBJECT_NAME               LOGON_TIM  SEC_WAIT   OSUSER    MACHINE      PROGRAM              STATE      STATUS     LOCK_ MODE_HELD
------------ ------------ ------------------------- --------- --------- ---------- ------------ -------------------- ---------- ---------- ----- ----------
5480,2261    PRODUSER       TMP_CONTROL               04-DEC-14    419010  mwrk01   fromClient1     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
5480,2261    PRODUSER       TMP_CONTROL               04-DEC-14    419010  mwrk01   fromClient1     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
4086,35783   PRODUSER       TMP_CONTROL               08-DEC-14     44446  mwrk01   fromClient1     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
4086,35783   PRODUSER       TMP_CONTROL               08-DEC-14     44446  mwrk01   fromClient1     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
7190,24855   PRODUSER       TMP_CONTROL               09-DEC-14      8601  mwrk01   fromClient1     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
7190,24855   PRODUSER       TMP_CONTROL               09-DEC-14      8601  mwrk01   fromClient2     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
8322,17323   PRODUSER       BILL_SUMMARY              09-DEC-14      1597  lwrk01   fromClient2     sqlplus@ccbdbpr1 (TN S V1-V3) WAITING    ACTIVE     DML   Row-X (SX) 
5179,65435   PRODUSER       TMP_BULK_LOCKING          09-DEC-14       296  mwrk01   fromClient2     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
5179,65435   PRODUSER       TMP_BULK_LOCKING          09-DEC-14       296  mwrk01   fromClient2     JDBC Thin Client     WAITING    INACTIVE   TO    Row-X (SX)
5179,65435   PRODUSER       TEMP_DAEMON_LOCKING       09-DEC-14       296  mwrk01   fromClient2     JDBC Thin Client     WAITING    INACTIVE   DML   Row-X (SX)
5179,65435   PRODUSER       TMP_BULK_LOCKING          09-DEC-14       296  mwrk01   fromClient2     JDBC Thin Client     WAITING    INACTIVE   TO    Row-X (SX)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1362396/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-1362396/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值