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

來源:互聯網
上載者:User

由於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\R30RBE32.exe
6823      75    661   corp-h APPS       applmgr  f45runm@corp-hp1 (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檔案之後,你就可以迅速地選擇那些要被終止的會話並單獨地運行它們。




相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。