程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 找到並終止Oracle9i裡被鎖定的會話

找到並終止Oracle9i裡被鎖定的會話

編輯:Oracle數據庫基礎

由於Oracle有內部鎖定(的機制),因此有些時候它對於找到並終止Oracle裡鎖定數據庫資源的會話很有用。首先,你需要找到所有的Oracle會話。下面是一段腳本,用來顯示Oracle內所有會話的細節。

remsession.sql - displays all connected sessions
set echo off;
set termout on;
set linesize 80;
set pagesize 60;
set newpage 0;

select
rpad(c.name||':',11)||rpad(' current logons='||
(to_number(b.sessions_current)),20)||'cumulative logons='||
rpad(substr(a.value,1,10),10)||'highwater mark='||
b.sessions_highwater Information
from
v$sysstat a,
v$license b,
v$database c
where
a.name = 'logons cumulative'
;

ttitle "dbnameDatabase|UNIX/Oracle Sessions";

set heading off;
select 'Sessions on database '||substr(name,1,8) from v$database;
set heading on;
select
substr(a.spid,1,9) pid,
substr(b.sid,1,5) sid,
substr(b.serial#,1,5) ser#,
substr(b.Machine,1,6) box,
substr(b.username,1,10) username,
substr(b.osuser,1,8) os_user,
substr(b.program,1,30) program
from
v$session b,
v$process a
where
b.paddr = a.addr
and
type='USER'
order by
spid;
ttitle off;
set heading off;
select 'To kill, enter SQLPLUS> ALTER SYSTEM KILL SESSION',
''''||'SID, SER#'||''''||';' from dual;
spool off;


Tue Mar 19 page 11
dbname Database
UNIX/Oracle Sessions

PID SID SER# BOX USERNAME OS_USER PROGRAM
--------- ----- ----- ------ ---------- -------- ------------------------------
6230 51 251 MWC\CO APPS TEilers S:\ORANT\BIN\F50RUN32.EXE
6233 69 2729 MWC\CO APPS TEilers S:\ORANT\BIN\R30R

BE32.exe
6823 75 661 corp-h APPS applmgr (TNS V1-V3)
6823 85 317 corp-h APPS applmgr
779 122 1307 corp-h APPS applmgr
9322 116 242 45A_10 APPS lmichel F50RUN32.EXE
9330 67 440 corp-h APPS applmgr

一旦我們找到了Oracle裡所有的會話,那麼下一步就是運行一個腳本來檢測所有已經被鎖定的會話。這是因為,Oracle可能無法以足夠快的速度檢測到一個不活動(dead)的會話,用以防止對數據訪問的阻斷(blockage)。你可以運行下面的腳本以定位那些管制著鎖定資源的會話。

select
sess.sid,
sess.serial#,
lo.Oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from
v$locked_object lo,
dba_objects ao,
v$session sess
where
ao.object_id = lo.object_id
and
lo.session_id = s.sid;

Tue Mar 19 page 1
Locked
objects

Oracle OS Object
sid ser# user User Name LOCKED_MODE
----- ----- ---------- ---------- ------------------------------ -----------
21 56 APPS applmgr FND_CONCURRENT_REQUESTS 2
77 535 APPS applmgr MTL_SYSTEM_ITEMS 2
126 161 APPS Oracle SO_LINES_ALL 2

一旦定位了已鎖定的會話,你就可以使用下面的腳本來自動地創建ALTER SESSION句法,用來終止你所希望終止的會話,這樣就能夠將鎖定的會話從Oracle裡清除掉。

spoolrun_nuke.sql

select
'alter system kill session '''||
sess.sid||', '||sess.serial#||';'
from
v$locked_object lo,
dba_objects ao,
v$session sess
where
ao.object_id = lo.object_id
and
lo.session_id = s.sid;

在創建完run_nuke.sql文件之後,你就可以迅速地選擇那些要被終止的會話並單獨地運行它們。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved