• 文字广告位
  • 文字广告位
  • 文字广告位
您现在的位置: 站长手册 >> 数据库 >> ORACLE >> 正文
站内搜索
Google
找到并终止Oracle9i里被锁定的会话
        ★★★ 【字体:

找到并终止Oracle9i里被锁定的会话

雅虎收藏夹 百度收藏 Google书签 Yahoo书签 新浪ViVi 搜狐网摘 365Key网摘 天极网摘 diglog 和讯网摘 POCO网摘 YouNote网摘 博拉网 天下图摘 Del.icio.us digg reddit spurl BlinkList blogmarks
人气: 来源:网络 作者:佚名 所属栏目: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\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文件之后,你就可以迅速地选择那些要被终止的会话并单独地运行它们。


  • 上一篇文章:
  • 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    姓 名: *(必填项) ·注册用户·
    Email: QQ号:
    评 分: 1分 2分 3分 4分 5分
    • 您可以发表评论支持你喜欢的文章。
    • 请遵守《互联网电子公告服务管理规定》
    • 请遵守中华人民共和国各项有关法律法规。
    • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
    • 评论人需对自己在使用评论过程中的行为承担法律责任。
    • 本站管理员有权保留或删除评论内容。
    • 评论内容只代表个人观点,与本网站立场无关。
    站内文章搜索
    ·最新文章      
    ·热门文章      
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | | 京ICP备 05004866号 |
    版权所有 2007-2008 站长手册 WWW.ZZSC.ORG 业务联系 zzsc.org#gmail.com