Oracle中查看引起Session阻塞的2个脚本分享

用户A执行删除,但是没有提交。

代码如下:

SQL> delete from test where object_id<10;

已删除8行。

用户B执行删除或者更新id<10的记录,则被阻塞。

代码如下:

SQL> update test set flag='N' where object_id<10;

遇到这种阻塞,首先需要确定问题。可以使用以下脚本。

代码如下:

select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;

结果如下:

代码如下:

USERNAME                              SID    SERIAL# LOGON_TIME
------------------------------ ---------- ---------- --------------
LIHUILIN                               14         87 09-11月-13
LIHUILIN                              139        655 09-11月-13

或者使用

代码如下:

select
(select username from v$session where sid=a.sid) blocker,
a.sid,' is blocking ',
(select username from v$session where sid=b.sid) blockee,
b.sid
from v$lock a,v$lock b
where a.block=1 and b.request>0 and a.id1=b.id1 and a.id2=b.id2;

结果如下:

代码如下:

BLOCKER                               SID 'ISBLOCKING'  BLOCKEE                               SID
------------------------------ ---------- ------------- ------------------------------ ----------
LIHUILIN                               14  is blocking  LIHUILIN                              139

Kill引起阻塞的Session

代码如下:

select 'alter system kill session '''||sid||','||serial#||''';' cmd from v$session where username='LIHUILIN' and sid=14;

结果如下:

代码如下:

CMD
-----------------------------------------
alter system kill session '14,87';

最后执行alter system命令,阻塞解除。

(0)

相关推荐

  • ORACLE 如何查询被锁定表及如何解锁释放session

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码 代码如下: --锁表查询SQLSELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s WHERE l.object_id = o.object_id AND l.session_id =

  • oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法

    今天碰到一个问题,有一张表不能操作,很可能是被锁了,首先想到的是kill session,于是执行了下列的脚本找到是哪个session有问题: 查看表是否被锁 SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = 'TM' and a.id1 = b.object_id; 根据上面查询出的sid,找出对应的serial#: SELECT sid,se

  • Oracle中的Connect/session和process的区别及关系介绍

    Session:在计算机中,尤其是在网络应用中,称为"会话". Session:在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间. Connect.session.process的区别: 一个数据库的Connect可以有一个或多个session,同时connect也可以有一个或多个process. 在专业服务器连接方式中,一个session对应一个process,在共享服务器方式中,一个process可以

  • 对于oracle对session进行跟踪的分析

    跟踪 session 的活动,Oracle提供了很多种手段,不仅可以对当前连接的 session 进行跟踪, 也可以对其他用户的 session 进行跟踪:通过对 trace 档的分析,不仅可以掌握该 session 的活动, 也可以找出这个 session 中的瓶颈所在,对 session 的跟踪是 DBA 进行系统调优.故障诊断的常用方法. 对当前会话的活动进行跟踪及停止跟踪: alter session set sql_trace=true/false 对任意的 session 进行跟踪及

  • Oracle中查看引起Session阻塞的2个脚本分享

    用户A执行删除,但是没有提交. 复制代码 代码如下: SQL> delete from test where object_id<10; 已删除8行. 用户B执行删除或者更新id<10的记录,则被阻塞. 复制代码 代码如下: SQL> update test set flag='N' where object_id<10; 遇到这种阻塞,首先需要确定问题.可以使用以下脚本. 复制代码 代码如下: select t2.username,t2.sid,t2.serial#,t2.

  • SqlServer中如何解决session阻塞问题

    简介 对于数据库运维人员来说创建session或者查询时产生问题是常规情况,下面介绍一种很有效且不借助第三方工具的方式来解决类似问题. 最近开始接触运维工作,所以自己总结一些方案便于不懂数据库的同事解决一些不太紧要的数据库问题.类似方法很多理论也很多,我就不做深究,就是简单写一个方案,便于菜鸟使用的. 阻塞理解 在Sql Server 中当一个数据库会话中的事务正锁定一个或多个其他会话事务想要读取或修改的资源时,会产生阻塞(Blocking).通常短时间的阻塞没有问题,且是较忙的应用程序所需要的

  • Oracle中查看慢查询进度的脚本分享

    Oracle一个大事务的SQL往往不知道运行到了哪里,可以使用如下SQL查看执行进度. 复制代码 代码如下: set linesize 400; set pagesize 400; col sql_text format a100; col opname format a15; SELECT se.sid,          opname,          TRUNC (sofar / totalwork * 100, 2) pct_work,          elapsed_seconds

  • Oracle中查看正在运行的SQL进程脚本分享

    Oracle的show processlist 复制代码 代码如下: set linesize 400; set pagesize 400; col sql_text format a100; col machine format a25; col username format a15; SELECT a.username,a.machine, b.sql_id, b.SQL_TEXT FROM v$session a, v$sqlarea b WHERE a.sql_address = b.

  • Oracle中查看表空间使用率的SQL脚本分享

    复制代码 代码如下: /* Formatted on 2012/5/31 14:51:13 (QP5 v5.185.11230.41888) */ SELECT D.TABLESPACE_NAME,        SPACE || 'M' "SUM_SPACE(M)",        BLOCKS "SUM_BLOCKS",        SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)",   

  • shell中的数组操作小结和冒泡排序实现脚本分享

    shell数组介绍: 复制代码 代码如下: //数组变量定义: $ arr=(1 3 6 8 2 5 9 0 7 4) // 默认获取第一个元素 $ echo $arr // 通过下标访问,下面取的数组第二个元素,shell数组下标是从0开始 $ echo ${arr[1]}    // 访问整个数组 $ echo ${arr[@]}  or echo ${arr[*]} // 获取数组的长度(最大下标) $ echo ${#arr[@]}  // 获取单个元素字符串长度 $ echo ${#a

  • perl中使用ip138网站查询ip归属地脚本分享

    这是去年年前写的一个perl脚本 哎 年后都没看过perl了. 复制代码 代码如下: #!/usr/bin/perl use LWP::Simple; open (FILE,"<file"); while(<FILE>){ s/^IP1.*//g; my @file =split(/\,|\s+/,$_); my @file1="$file[0] $file[1]"; my $IP ="$file[1]" ; my $domai

  • 基于java中cookie和session的比较

    cookie和session的比较 一.对于cookie: ①cookie是创建于服务器端 ②cookie保存在浏览器端 ③cookie的生命周期可以通过cookie.setMaxAge(2000);来设置,如果没有设置setMaxAge, 则cookie的生命周期当浏览器关闭的时候,就消亡了 ④cookie可以被多个同类型的浏览器共享  可以把cookie想象成一张表 比较: ①存在的位置: cookie 存在于客户端,临时文件夹中 session:存在于服务器的内存中,一个session域对

  • php查看当前Session的ID实例

    本文实例讲述了php查看当前Session的ID的方法.分享给大家供大家参考.具体如下: 有两种方法可以得到用户的session id,第一是使用session_id()函数,另外一种是使用内置的常量SID获得,SID包含了session id和session值 <?php session_start(); print("<html><b>"); $sid = session_id(); print("Session ID returned by

随机推荐