Retrieve Lock Status
ロック実行しているコマンドとロックの種類

Username:
Oracleユーザ名
SID:
セッション識別子(V$SESSION.SID)
Table/Sequence Name:
ロック対象の表または順序の名前。Lock Typeが
TM - DML enqueue
DL - Direct loader/parallel index create
SQ - Sequence number enqueue
の場合に対象オブジェクトを特定することができます。
Command:
実行中のコマンドの種類
Lock Held:
保持しているロックのモード
Lock Requested:
要求しているロックのモード
ID1 - ID2:
ロック識別子(V$LOCK.ID1およびID2)
Lock Type:
ロックの種類

下記の出力例では、ユーザHRで接続しているSID=9のセッションがHR.EMPLOYEES表に対するTMロックをRow Exclusive、TXロックをExclusiveで獲得しています。
(Username,SIDがブランクの2レコード目は1レコード目と同じセッションの情報をあらわしています。結果はUsername,SIDでソートされて表示されるので、同じセッションの情報は続けて出力されます。)
また、ユーザSHで接続しているSID=8のセッションがDELETEを実行しようとして、SID=9のセッションが獲得しているTXロック(ID1,ID2が同値)をExclusiveで要求していることも読み取れます。(TXロックをExclusiveで要求するのは行ロック競合の場合です。)

set echo off
set lines 200
set pagesize 66
break on Kill on sid on  username on terminal
column Kill heading 'Kill String' format a13
column res heading 'Resource Type' format 999
column id1 format 9999990
column id2 format 9999990
column locking heading 'Lock Held/Lock Requested' format a40
column lmode heading 'Lock Held' format a20
column request heading 'Lock Requested' format a20
column serial# format 99999
column username  format a10  heading "Username"
column terminal heading Term format a6
column obj format a30 heading "Table/Sequence Name"
column owner format a9
column LAddr heading "ID1 - ID2" format a18
column Lockt heading "Lock Type" format a40
column command heading "Command" format a25
column sid format 990
 
select
    nvl(s.username,'Internal') username,
    l.sid,
    nvl(s.terminal,'None') terminal,
    decode(l.type,'TM',u.name||'.'||substr(t.name,1,20),
           'DL',u.name||'.'||substr(t.name,1,20),
           'SQ',u.name||'.'||substr(t.name,1,20),'None') obj,
    decode(command,
        0,'None',
        1,'CREATE TABLE',
        2,'INSERT',
        3,'SELECT',
        4,'CREATE CLUSTER',
        5,'ALTER CLUSTER',
        6,'UPDATE',
        7,'DELETE',
        8,'DROP CLUSTER',
        9,'CREATE INDEX',
        10,'DROP INDEX',
        11,'ALTER INDEX',
        12,'DROP TABLE',
        13,'CREATE SEQUENCE',
        14,'ALTER SEQUENCE',
        15,'ALTER TABLE',
        16,'DROP SEQUENCE',
        17,'GRANT',
        18,'REVOKE',
        19,'CREATE SYNONYM',
        20,'DROP SYNONYM',
        21,'CREATE VIEW',
        22,'DROP VIEW',
        23,'VALIDATE INDEX',
        24,'CREATE PROCEDURE',
        25,'ALTER PROCEDURE',
        26,'LOCK TABLE',
        27,'NO OPERATION',
        28,'RENAME',
        29,'COMMENT',
        30,'AUDIT',
        31,'NOAUDIT',
        32,'CREATE DATABASE LINK',
        33,'DROP DATABASE LINK',
        34,'CREATE DATABASE',
        35,'ALTER DATABASE',
        36,'CREATE ROLLBACK SEGMENT',
        37,'ALTER ROLLBACK SEGMENT',
        38,'DROP ROLLBACK SEGMENT',
        39,'CREATE TABLESPACE',
        40,'ALTER TABLESPACE',
        41,'DROP TABLESPACE',
        42,'ALTER SESSION',
        43,'ALTER USER',
        44,'COMMIT',
        45,'ROLLBACK',
        46,'SAVEPOINT',
        47,'PL/SQL EXECUTE',
        48,'SET TRANSACTION',
        49,'ALTER SYSTEM SWITCH LOG',
        50,'EXPLAIN',
        51,'CREATE USER',
        52,'CREATE ROLE',
        53,'DROP USER',
        54,'DROP ROLE',
        55,'SET ROLE',
        56,'CREATE SCHEMA',
        57,'CREATE CONTROL FILE',
        58,'ALTER TRACING',
        59,'CREATE TRIGGER',
        60,'ALTER TRIGGER',
        61,'DROP TRIGGER',
        62,'ANALYZE TABLE',
        63,'ANALYZE INDEX',
        64,'ANALYZE CLUSTER',
        65,'CREATE PROFILE',
        66,'DROP PROFILE',
        67,'ALTER PROFILE',
        68,'DROP PROCEDURE',
        69,'-',
        70,'ALTER RESOURCE COST',
        71,'CREATE SNAPSHOT LOG',
        72,'ALTER SNAPSHOT LOG',
        73,'DROP SNAPSHOT LOG',
        74,'CREATE SNAPSHOT',
        75,'ALTER SNAPSHOT',
        76,'DROP SNAPSHOT',
        77,'CREATE TYPE',
        78,'DROP TYPE',
        79,'ALTER ROLE',
        80,'ALTER TYPE',
        81,'CREATE TYPE BODY',
        82,'ALTER TYPE BODY',
        83,'DROP TYPE BODY',
        84,'DROP LIBRARY',
        85,'TRUNCATE TABLE',
        86,'TRUNCATE CLUSTER',
        87,'CREATE BITMAP FILE',
        88,'ALTER VIEW',
        89,'DROP BITMAP FILE',
        90,'SET CONSTRAINTS',
        91,'CREATE FUNCTION',
        92,'ALTER FUNCTION',
        93,'DROP FUNCTION',
        94,'CREATE PACKAGE',
        95,'ALTER PACKAGE',
        96,'DROP PACKAGE',
        97,'CREATE PACKAGE BODY',
        98,'ALTER PACKAGE BODY',
        99,'DROP PACKAGE BODY',
        command||' - ???') command,
    decode(l.lmode,1,'No Lock',
        2,'Row Share',
        3,'Row Exclusive',
        4,'Share',
        5,'Share Row Exclusive',
        6,'Exclusive','NONE') lmode,
    decode(l.request,1,'No Lock',
        2,'Row Share',
        3,'Row Exclusive',
        4,'Share',
        5,'Share Row Exclusive',
        6,'Exclusive','NONE') request,
    l.id1||'-'||l.id2 Laddr,
    l.type||' - '||
    decode(l.type,
        'BL','Buffer hash table instance',
        'CF',' Control file schema global enqueue',
        'CI','Cross-instance function invocation instance',
        'CU','Cursor bind',
        'DF','Data file instance',
        'DL','Direct loader parallel index create',
        'DM','Mount/startup db primary/secondary instance',
        'DR','Distributed recovery process',
        'DX','Distributed transaction entry',
        'FS','File set',
        'HW','Space management operations on a specific segment',
        'IN','Instance number',
        'IR','Instance recovery serialization global enqueue',
        'IS','Instance state',
        'IV','Library cache invalidation instance',
        'JQ','Job queue',
        'KK','Thread kick',
        'LA','Library cache lock instance (A=namespace)',
        'LB','Library cache lock instance (B=namespace)',
        'LC','Library cache lock instance (C=namespace)',
        'LD','Library cache lock instance (D=namespace)',
        'LE','Library cache instance lock (E=namespace)',
        'LF','Library cache instance lock (F=namespace)',
        'LG','Library cache instance lock (G=namespace)',
        'LH','Library cache instance lock (H=namespace)',
        'LI','Library cache instance lock (I=namespace)',
        'LJ','Library cache instance lock (J=namespace)',
        'LK','Library cache instance lock (K=namespace)',
        'LL','Library cache instance lock (L=namespace)',
        'LM','Library cache instance lock (M=namespace)',
        'LN','Library cache instance lock (N=namespace)',
        'LO','Library cache instance lock (O=namespace)',
        'LP','Library cache instance lock (P=namespace)',
        'MM','Mount definition gloabal enqueue',
        'MR','Media recovery',
        'NA','Library cache pin instance (A=namespace)',
        'NB','Library cache pin instance (B=namespace)',
        'NC','Library cache pin instance (C=namespace)',
        'ND','Library cache pin instance (D=namespace)',
        'NE','Library cache pin instance (E=namespace)',
        'NF','Library cache pin instance (F=namespace)',
        'NG','Library cache pin instance (G=namespace)',
        'NH','Library cache pin instance (H=namespace)',
        'NI','Library cache pin instance (I=namespace)',
        'NJ','Library cache pin instance (J=namespace)',
        'NL','Library cache pin instance (K=namespace)',
        'NK','Library cache pin instance (L=namespace)',
        'NM','Library cache pin instance (M=namespace)',
        'NN','Library cache pin instance (N=namespace)',
        'NO','Library cache pin instance (O=namespace)',
        'NP','Library cache pin instance (P=namespace)',
        'NQ','Library cache pin instance (Q=namespace)',
        'NR','Library cache pin instance (R=namespace)',
        'NS','Library cache pin instance (S=namespace)',
        'NT','Library cache pin instance (T=namespace)',
        'NU','Library cache pin instance (U=namespace)',
        'NV','Library cache pin instance (V=namespace)',
        'NW','Library cache pin instance (W=namespace)',
        'NX','Library cache pin instance (X=namespace)',
        'NY','Library cache pin instance (Y=namespace)',
        'NZ','Library cache pin instance (Z=namespace)',
        'PF','Password file',
        'PI','Parallel operation',
        'PR','Process startup',
        'PS','Parallel operation',
        'QA','Row cache instance (A=cache)',
        'QB','Row cache instance (B=cache)',
        'QC','Row cache instance (C=cache)',
        'QD','Row cache instance (D=cache)',
        'QE','Row cache instance (E=cache)',
        'QF','Row cache instance (F=cache)',
        'QG','Row cache instance (G=cache)',
        'QH','Row cache instance (H=cache)',
        'QI','Row cache instance (I=cache)',
        'QJ','Row cache instance (J=cache)',
        'QL','Row cache instance (K=cache)',
        'QK','Row cache instance (L=cache)',
        'QM','Row cache instance (M=cache)',
        'QN','Row cache instance (N=cache)',
        'QO','Row cache instance (O=cache)',
        'QP','Row cache instance (P=cache)',
        'QQ','Row cache instance (Q=cache)',
        'QR','Row cache instance (R=cache)',
        'QS','Row cache instance (S=cache)',
        'QT','Row cache instance (T=cache)',
        'QU','Row cache instance (U=cache)',
        'QV','Row cache instance (V=cache)',
        'QW','Row cache instance (W=cache)',
        'QX','Row cache instance (X=cache)',
        'QY','Row cache instance (Y=cache)',
        'QZ','Row cache instance (Z=cache)',
        'RT','Redo thread global enqueue',
        'SC','System commit number instance',
        'SM','SMON',
        'SN','Sequence number instance',
        'SQ','Sequence number enqueue',
        'SS','Sort segment',
        'ST','Space transaction enqueue',
        'SV','Sequence number value',
        'TA','Generic enqueue',
        'TM','DML enqueue',
        'TS',decode(l.id2,0,'Temporary segment enqueue',
                    'New block allocation enqueue lock'),
        'TT','Temporary table enqueue',
        'TX','Transaction enqueue',
        'UL','User supplied',
        'UN','User name',
        'US','Undo segment DDL',
        'WL','Being-written redo log instance', '????') Lockt
from    V$LOCK l,
        V$SESSION s,
        SYS.USER$ u,
        SYS.OBJ$ t
where   l.sid = s.sid
and     t.obj#  = decode(l.type,'TM',l.id1,'DL',l.id1,'SQ',l.id1,1)
and     u.user# = t.owner#
and     s.type != 'BACKGROUND'
order by 1,2,5 ;
 
   Username    SID Term   Table/Sequence Name            Command
   Lock Held            Lock Requested       ID1 - ID2          Lock Type
   ---------- ---- ------ ------------------------------ -------------------------
   -------------------- -------------------- ------------------ ----------------------------------------
   HR            9 pts/18 HR.EMPLOYEES                   NONE
   Row Exclusive        NONE                 28788-0            TM - DML enqueue
                          None                           NONE
   Exclusive            NONE                 262163-328         TX - Transaction enqueue
   SH            8 pts/5  None                           DELETE
   NONE                 Exclusive            262163-328         TX - Transaction enqueue
   .....

Reference: KROWN-63565 各セッションが実行中のコマンドの種類と獲得または要求しているロックの種類を確認するスクリプト

LOCKのモニタスクリプト

v$lock.typeがTX(Transaction)で、ID1・ID2が同じ値の場合競合となる。
また、lmodeがXのセッションはrequestがXのセッションをロックする意味である。

col username  for a15 
col requested for a9 
 
select s.username, s.sid, s.serial#, l.type "LOCK TYPE", l.id1, l.id2, 
       decode(l.lmode,0,'NONE', 
                      1,'NULL', 
                      2,'  RS', 
                      3,'  RX', 
                      4,'   S', 
                      5,' SRX', 
                      6,'   X', 
                        '   ?') HELD, 
       decode(l.request,0,'     NONE', 
                        1,'     NULL', 
                        2,'       RS', 
                        3,'       RX', 
                        4,'        S', 
                        5,'      SRX', 
                        6,'        X', 
                          '        ?') REQUESTED 
   from v$lock l,v$session s 
   where l.sid = s.sid 
   and s.username like upper('%%') 
   order by s.sid, l.type; 
 
USERNAME             SID SERIAL# LO        ID1        ID2 HELD REQUESTED 
--------------- -------- ------- -- ---------- ---------- ---- --------- 
LTO                    5      15 TM       2294          0   RX      NONE
LTO                    5      15 TM       2295          0   RX      NONE
LTO                    5      15 TX     262167         87    X      NONE
LTO2                   6      35 TM       2294          0   RX      NONE
LTO2                   6      35 TM       2295          0   RX      NONE
LTO2                   6      35 TX     262167         87 NONE         X
LTO3                   9      17 TM       2294          0   RX      NONE
LTO3                   9      17 TM       2295          0   RX      NONE
LTO3                   9      17 TX     262167         87 NONE         X
LTO3                   9      17 TX     196636         87    X      NONE

拙者の修正したスクリプト:

select /*+ rule */ s.username, s.sid, s.serial#, l.type "LOCK TYPE", l.id1||'-'||l.id2 id1_id2, 
       decode(l.lmode,0,'NONE', 
                      1,'NULL', 
                      2,'  RS', 
                      3,'  RX', 
                      4,'   S', 
                      5,' SRX', 
                      6,'   X', 
                        '   ?') HELD, 
       decode(l.request,0,'     NONE', 
                        1,'     NULL', 
                        2,'       RS', 
                        3,'       RX', 
                        4,'        S', 
                        5,'      SRX', 
                        6,'        X', 
                          '        ?') REQUESTED 
   from v$lock l,v$session s 
   where l.sid = s.sid 
   and s.username like upper('%%') 
   order by id1_id2, s.sid, l.type;

Reference:
KROWN-17289 LOCKを監視するスクリプト
KROWN-100077 V$LOCK, V$ENQUEUE_LOCK, V$TRANSACTION_ENQUEUE の検索に時間がかかる
KROWN-71034

シングルインスタンスロック情報の取得

概要 ハング時に取得する情報およびその取得方法(Oracle9i以降対応版 シングルインスタンス対応)
内容:
[概要]
Oracleがハングしたと考えられる場合に取得する情報とその取得方法を説明します。
Oracleがハングしたと考えられる状況の原因を特定するためには、Oracleが現在
どのような状況にあるのかを確認する必要があります。そのような場合に一般的に
取得すべき情報を以下に示します。

注意1: 本文書にある情報を取得すべきか否か、お客様自身で判断することができない
場合、現在の状況を弊社カスタマーサポートまでお問合せください。
その後サポートアナリストの指示に従ってください。

注意2: 復旧を最優先するためにサポートアナリストの指示を待つ時間的余裕がない
場合は、復旧作業(OS又はOracle再起動)前に以下の情報の取得を検討して
ください。

注意3: RAC環境を前提としたハング時に採取する情報およびその取得方法については、
以下の情報を参照してください。

KROWN文書番号:20667 OPS/RAC環境でのハング時に取得すべき情報

注意4: SQL*Plus で接続するユーザは sysユーザ(as sysdba)で実施してください。
もし、sysユーザで接続ができない場合には以下の KROWN:101159 で案内して
いる SQL*Plus の -prelim オプションで接続後、以下で説明している方法で
資料を採取してください。

SQL*Plus の -prelim オプションを使用する場合
^^^^^^^^^^^^

[対象リリース]
Oracle Database 11g Release 1(11.1.0)
Oracle Database 10g Release 2(10.2.0)
Oracle Database 10g Release 1(10.1.0)
Oracle9i Database Release 2(9.2.0)
Oracle9i Database Release 1(9.0.1)

[対象プラットフォーム]
すべてのプラットフォーム

[詳細]
取得方法:

問題のハング状態が発生しており、情報採取時時点においても継続中であることを確認し
たうえで以下のように情報を取得します。Oracleが稼動するOS環境に依存して取得する情
報に差があります。

- Unix系プラットフォームのOracleを利用している場合:
下記の1,2の取得情報を約3分間隔で3回取得します。

- WindowsプラットフォームのOracleを利用している場合:
下記の1,(可能であれば 2'も) の取得情報を約3分間隔で3回取得します。

- Windowsプラットフォームの以下のプラットフォームおよびバージョン以外では
lockchk10win.sql を使用してください。

Windows x86 10.2.0.1 以降
Windows x86-64,ia64 10.2.0.4 以降

* 詳細は[補足] の以下を参照してください。
■Windowsプラットフォームに関する注意

- HP-UX プラットフォームのOracle 10.2.0 を利用している場合:
リリースによっては short stack が出力されません。
詳細は KROWN:126057, KROWN:126055 を参照してください。

取得情報:

1. SQL*Plusを使用し、DBA権限を持つユーザで接続してから、データ取得対照のデータベース
のリリースに応じたスクリプト(lockchk9.sql、lockchk10.sql、lockchk10win.sql)を実行し、
結果をSPOOLします。(以下lockchk9.sqlと表記されている部分は適宜lockchk10.sqlもしくは
lockchk10win.sqlと読み替えて実行してください。

lockchk9.sql は9.2.0.6 / 10.1.0.3 以前を実行対象としています。

lockchk10.sql は9.2.0.7 / 10.1.0.4 / 10.2.0.1 以降のWindowsを除くプラットフォームを
実行対象としています。 ~~~~~~~~~~~~

lockchk10win.sql は9.2.0.7 / 10.1.0.4 / 10.2.0.1 以降のWindowsプラットフォームを
実行対象としています。 ~~~~~~~

<注意> 3回取得しますが、その際にSPOOL FILE名は重複しないように指定してください。

lockchk9.sql内でSYSTEM STATE DUMPとHANGANALYZEの情報を取得しています。トレース
ファイルは、初期化パラメータ USER_DUMP_DEST で指定されるディレクトリに出力され
ます。

<注意> lockchk9.sqlではSYSTEM STATE DUMPが完全に出力されるようにセッション単位
で初期化パラメータMAX_DUMP_FILE_SIZEをUNLIMITEDに設定しています。トレー
スファイル出力先のディレクトリには十分な領域があることを事前に確認して
ください。

2. ps コマンド: ps -elf の結果をリダイレクトしてファイルに出力します。

2'. Windowsプラットフォームで、スレッドの情報を取得できるツール(PSLIST.EXE 等)が
ある場合は、その実行結果をファイルにリダイレクトします。

※現在使用可能な最新バージョンはv1.82です。

pslist v1.82 の場合) pslist -d > pslist1.txt

注意: pslist でスレッドの情報を出力するためのパラメータについては、 pslist
のヘルプから使用可能なパラメータを確認してください。なお、PSLIST.EXEの
使用例の詳細は、KROWN文書番号:26845を参照してください。

«実行例»

注意4 に記載されている SQL*Plus の prelim オプションを使用する場合には
スクリプトによる取得ができないので sqlplus で取得する情報については以下で
説明している方法で採取してください。

SQL*Plus -prelim オプションを使用する場合
^^^^^^^^^

- Windowsプラットフォーム上のOracle9i R9.2.0での取得例:

1. ORACLE_SIDの指定

コマンド・プロンプトで、以下のように実行します。
C:\TEMP> SET ORACLE_SID=ORCL (<= ここではORACLE_SIDをORCLと仮定します。)
C:\TEMP> ECHO %ORACLE_SID%
ORCL (<= 設定したORACLE_SIDが正しく返されることを確認します。)

2. 上記ORACLE_SIDを設定したコマンド・プロンプト上にて、以下のように
情報取得を行います。ここでは pslist のバージョンは v1.82 と仮定します。

1度目:
C:\TEMP> sqlplus "/ as sysdba" @lockchk9.sql lockchk1.lst
(可能であれば) C:\TEMP> pslist -d > pslist1.txt

2度目: (1度目の取得の約3分後に実行します)
C:\TEMP> sqlplus "/ as sysdba" @lockchk9.sql lockchk2.lst
(可能であれば) C:\TEMP> pslist -d > pslist2.txt

3度目: (2度目の取得の約3分後に実行します)
C:\TEMP> sqlplus "/ as sysdba" @lockchk9.sql lockchk3.lst
(可能であれば) C:\TEMP> pslist -d > pslist3.txt

- Unix系プラットフォーム上のOracle9i R9.2.0での取得例:

環境変数 ORACLE_SID に 接続先のORACLEのSID名が設定されていると仮定します。その
シェル上にて、以下のように情報取得を行います。

1度目:
% sqlplus "/ as sysdba" @lockchk9.sql lockchk1.lst
% ps -elf > ps1.txt

2度目: (1度目の取得の約3分後に実行します)
% sqlplus "/ as sysdba" @lockchk9.sql lockchk2.lst
% ps -elf > ps2.txt

3度目: (2度目の取得の約3分後に実行します)
% sqlplus "/ as sysdba" @lockchk9.sql lockchk3.lst
% ps -elf > ps3.txt

スクリプト:

■9.2.0.6 / 10.1.0.3 以前用スクリプト(lockchk9.sql)

--- begin [lockchk9.sql] ---
define spoolfile = &1
spool &spoolfile
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set timed_statistics = true;
alter session set max_dump_file_size = UNLIMITED;
set feedback on
set term on
set wrap on
set trimspool on
set pagesize 1000
set linesize 2000
set numwidth 10
 
select to_char(sysdate) start_time from dual;
alter session set events 'immediate trace name systemstate level 10';
alter session set events 'immediate trace name hanganalyze level 3';
 
column host_name format a20 tru
 
select instance_name, host_name, version, status, startup_time from v$instance;
 
set echo on
 
select * from v$session;
select * from v$process;
select * from v$bgprocess;
select * from v$lock;
select * from v$locked_object;
select * from v$session_wait;
select * from v$latch;
select * from v$latchholder;
select * from v$rowcache;
 
/* 以下はMTS用 */
select * from v$dispatcher;
select * from v$shared_server;
select * from v$circuit;
select * from v$queue;
select * from v$dispatcher_rate;
 
set echo off
Prompt;
Prompt Output file name is:;
define spoolfile
Prompt;
Prompt ALERT.LOG and TRACE FILES are located in:;
 
column host_name format a12 tru
column name format a20 tru
column value format a60 tru
 
select distinct i.host_name, p.name, p.value from v$instance i, v$parameter p
 where p.name like '%_dump_dest'
   and p.name != 'core_dump_dest';
 
select to_char(sysdate) end_time from dual;
spool off
exit
--- end [lockchk9.sql] ---

■9.2.0.7 / 10.1.0.4 / 10.2.0.1 以降用スクリプト(lockchk10.sql)

--- begin [lockchk10.sql] ---
define spoolfile = &1
spool &spoolfile
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set timed_statistics = true;
alter session set max_dump_file_size = UNLIMITED;
set feedback on
set term on
set wrap on
set trimspool on
set pagesize 1000
set linesize 2000
set numwidth 10
 
select to_char(sysdate) start_time from dual;
alter session set events 'immediate trace name systemstate level 266';
alter session set events 'immediate trace name hanganalyze level 3';
 
column host_name format a20 tru
select instance_name, host_name, version, status, startup_time from v$instance;
 
set echo on
 
select * from v$session;
select * from v$process;
select * from v$bgprocess;
select * from v$lock;
select * from v$locked_object;
select * from v$session_wait;
select * from v$latch;
select * from v$latchholder;
select * from v$rowcache;
 
/* 以下はMTS用 */
select * from v$dispatcher;
select * from v$shared_server;
select * from v$circuit;
select * from v$queue;
select * from v$dispatcher_rate;
 
set echo off
Prompt;
Prompt Output file name is:;
define spoolfile
Prompt;
Prompt ALERT.LOG and TRACE FILES are located in:;
 
column host_name format a12 tru
column name format a20 tru
column value format a60 tru
 
select distinct i.host_name, p.name, p.value from v$instance i, v$parameter p
 where p.name like '%_dump_dest'
   and p.name != 'core_dump_dest';
 
select to_char(sysdate) end_time from dual;
 
spool off
exit
--- end [lockchk10.sql] ---

■Windows用 9.2.0.7 / 10.1.0.4 / 10.2.0.1 以降用スクリプト(lockchk10win.sql)

--- begin [lockchk10win.sql] ---
define spoolfile = &1
spool &spoolfile
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set timed_statistics = true;
alter session set max_dump_file_size = UNLIMITED;
 
set feedback on
set term on
set wrap on
set trimspool on
set pagesize 1000
set linesize 2000
set numwidth 10
 
select to_char(sysdate) start_time from dual;
alter session set events 'immediate trace name systemstate level 10';
alter session set events 'immediate trace name hanganalyze level 3';
 
column host_name format a20 tru
 
select instance_name, host_name, version, status, startup_time from v$instance;
 
set echo on
 
select * from v$session;
select * from v$process;
select * from v$bgprocess;
select * from v$lock;
select * from v$locked_object;
select * from v$session_wait;
select * from v$latch;
select * from v$latchholder;
select * from v$rowcache;
 
/* 以下はMTS用 */
select * from v$dispatcher;
select * from v$shared_server;
select * from v$circuit;
select * from v$queue;
select * from v$dispatcher_rate;
 
set echo off
Prompt;
Prompt Output file name is:;
define spoolfile
Prompt;
Prompt ALERT.LOG and TRACE FILES are located in:;
column host_name format a12 tru
column name format a20 tru
column value format a60 tru
 
select distinct i.host_name, p.name, p.value from v$instance i, v$parameter p
 where p.name like '%_dump_dest'
   and p.name != 'core_dump_dest';
 
select to_char(sysdate) end_time from dual;
 
spool off
exit
--- end [lockchk10win.sql] ---

SQL*Plus の -prelim オプションを使用する場合
^^^^^^^^^^^^
SQL*Plus の -prelim で接続した場合には oradebug コマンドを使用した情報を
取得することになります。
KROWN:101159 で案内している方法で接続後、以下のコマンドを実行してください。
また、資料については 3回取得してください。

SQL> oradebug dump hanganalyze 3
 SQL> oradebug dump systemstate 10
 SQL> exit

[補足]
9.2.0.7 / 10.1.0.4 / 10.2.0.1 以降では、systemstate dump の取得時に short stack
の取得が可能になりました。 これにより簡単な stack 情報を systemstate 取得時に
同時に取得することができます。

■Windowsプラットフォームに関する注意

Windowsプラットフォームにおいて short stack によりCPU使用率の高騰もしくは、
Oracleバックグラウンド・プロセスのダウンに至る事例が報告されていますが以下の
プラットフォームおよびバージョンでは short stack が取得可能です。

Windows x86 10.2.0.1 以降
Windows x86-64,ia64 10.2.0.4 以降

上記以外の Windowsプラットフォームにおいては short stack取得は行わないでください。
(使用スクリプトは、short stackの取得を行わない lockchk10win.sql を使用してください。)

なお、short stack は以下のようなフォーマットで systemstate dump 内に出力されます。

-10.2.0以前の出力例-

----------
    Short stack dump: ksdxfstk<-ksdxcb<-sspuser<-sigacthandler<-_poll<-ntevpque
<-ntevque<-nsevwait<-ksnwait<-ksliwat<-kswaitns<-kskthbwt<-kslwait<-ksuclnwt<-
ksucln<-ksbrdp<-opirip<-opidrv<-sou2o<-main<-_start
----------

-10.2.0以降からの出力例-
----------
    Short stack dump:
ksdxfstk()+19<-ksdxcb()+1321<-sspuser()+81<-semtimedop()+31<-sskgpwwait()+304<-
skgpwwait()+146<-ksliwat()+891<-kslwaitns()+29<-kskthbwt()+370<-kslwait()+57<-
ksarcv()+343<-ksbabs()+517<-ksbrdp()+926<-opirip()+671<-opidrv()+864<-sou2o()+
113<-opimai_real()+353<-main()+111<-__libc_start_main()+218
----------

Reference: KROWN-66559
KROWN-19355 ハング時に取得する情報およびその取得方法
KROWN-126057 10.2 for HP-UX Itanium 環境において SYSTEM STATE DUMP に short stack が出力されない
KROWN-126055 10.2 for HP-UX PA-RISC 環境において SYSTEM STATE DUMP に short stack が出力されない
KROWN-101159 ハング時に診断のためにSQL*Plusでログインできない場合の回避策

page_revision: 16, last_edited: 1251117190|%e %b %Y, %H:%M %Z (%O ago)