Documente Academic
Documente Profesional
Documente Cultură
profile
set serveroutput on
--set serveroutput on size 1000000 format wrapped
spool /dba/scripts/logs/ORAPROD1/locking.txt
DECLARE
CURSOR C1
IS
SELECT B.INST_ID AS BINST,B.SID AS BSID , R.INST_ID AS RINST ,R.SID AS RSID,
B.CTIME AS BTIME, R.CTIME AS RTIME
FROM GV\$LOCK R, GV\$LOCK B
WHERE R.REQUEST > 0 AND B.BLOCK > 0 AND R.ID1 = B.ID1 AND R.ID2 = B.ID2 AND
R.CTIME > 600
ORDER BY R.CTIME desc ;
CURSOR C2
IS
SELECT * from gv\$session where seconds_in_wait > 600 and program not like
'%extproc32mgwextproc%'
and event NOT IN
('SQL*Net break/reset to client','SQL*Net message from client','PL/SQL lock
timer','Streams AQ: waiting for messages in the queue','jobq slave wait','HS
message to agent','SQL*Net message to client') AND TYPE NOT IN ('BACKGROUND') order
by seconds_in_wait desc;
V_INSTID NUMBER;
V_SPID NUMBER;
V_SPIDB NUMBER;
V_APPSUSER VARCHAR2(120);
V_DESC VARCHAR2(120);
V_USERNAME VARCHAR2(120);
V_SID NUMBER;
V_SERIAL NUMBER;
V_SERIALB NUMBER;
V_DETAILS VARCHAR2(120);
V_STATUS VARCHAR2(10);
V_BLOCKUSER VARCHAR2(120);
V_LOCKUSER VARCHAR2(120);
v_EVENT VARCHAR2(120);
V_WAITER VARCHAR2(120);
V_SECONDS NUMBER;
V_CNT NUMBER := 0;
BEGIN
-- LOOP FOR ALL BLOCKERS TO FIND WHO IS BEING BLOCKED
FOR C1REC IN C1
LOOP
IF V_CNT = 0 THEN
dbms_output.put_line('-');
DBMS_OUTPUT.PUT_LINE('BLOCKING USERS');
dbms_output.put_line('-');
V_CNT :=1;
END IF;
SELECT S.INST_ID,
P.SPID,
NVL(L.USER_NAME,'UNKNOWN'),
NVL(L.DESCRIPTION,'UNKNOWN'),
S.USERNAME,
S.SID,
S.SERIAL#,
S.PROGRAM||' '||S.ACTION||' '||S.MODULE
--STATUS
INTO V_INSTID, V_SPIDB, V_APPSUSER, V_DESC, V_USERNAME, V_SID, V_SERIALB,
V_DETAILS
FROM GV\$SESSION S, GV\$PROCESS P,
(SELECT * FROM APPLSYS.FND_LOGINS FL,APPLSYS.FND_USER U
WHERE U.USER_ID = FL.USER_ID AND TRUNC(START_TIME) = TRUNC(SYSDATE) AND
END_TIME IS NULL AND LOGIN_TYPE = 'FORM') L
WHERE P.PID = L.PID(+) AND P.SERIAL# = L.SERIAL#(+) AND P.ADDR = S.PADDR
AND S.SID=C1REC.RSID AND S.INST_ID = C1REC.RINST AND S.INST_ID = P.INST_ID and
rownum=1 ORDER BY S.PROCESS,LOGON_TIME;
DBMS_OUTPUT.PUT_LINE('_____________________________________________________________
___________________');
END LOOP;
v_CNT := 0;
for C2REC IN C2
loop
IF V_CNT = 0 THEN
dbms_output.put_line('-');
DBMS_OUTPUT.PUT_LINE('WAITING USERS');
dbms_output.put_line('-');
V_CNT :=1;
END IF;
SELECT s.inst_id,
s.event,
s.seconds_in_wait,
p.spid ,NVL(l.user_name,'UNKNOWN') ,
NVL(l.description,'UNKNOWN'),
S.USERNAME,
s.SID,
s.serial#,
s.program||' '||s.ACTION||' '||s.module,
status
into V_INSTID, v_EVENT, V_SECONDS, V_SPID, V_APPSUSER , V_DESC, V_USERNAME ,
V_SID, V_SERIAL, V_DETAILS, V_STATUS
FROM gv\$session s, gv\$process p,
(SELECT * FROM applsys.fnd_logins fl,applsys.fnd_user u WHERE u.user_id =
fl.user_id AND TRUNC(start_time) = TRUNC(SYSDATE)
AND end_time IS NULL AND login_type = 'FORM') l
WHERE s.sid = c2rec.sid and s.inst_id = c2rec.inst_id and p.pid = l.pid(+) AND
p.serial# = l.serial#(+) AND p.addr = s.paddr AND s.inst_id = p.inst_id
and rownum=1;
IF V_APPSUSER != 'UNKNOWN' THEN
V_WAITER := V_APPSUSER;
ELSIF V_DESC != 'UNKNOWN' THEN
V_WAITER := V_DESC;
ELSE
V_WAITER := V_DETAILS;
END IF ;
DBMS_OUTPUT.PUT_LINE('_____________________________________________________________
___________________');
end loop;
END;
/
EOF