在使用 Oracle 数据库时,我们偶尔会遇到修改表结构(比如添加字段)无响应的情况,引起这种现象的一个可能原因是这个表上有未提交的DML事务。

那怎么查看是否有未提交的事务呢?又怎样定位到具体语句呢?

现通过示例进行演示

对已存在的表 table1 进行 delete 操作(暂不提交):

delete from table1 where ID=2;

查询当前 session 的 SID:

select userenv('sid') from dual;

结果如下:

现通过如下所示的 SQL 语句 1,可查询到未提交的 DML 语句:

--SQL 语句 1:查询未提交事务 DML 语句
SELECT  S.SID,S.SERIAL#,S.USERNAME,S.OSUSER ,S.PROGRAM ,S.EVENT,TO_CHAR(S.LOGON_TIME,'YYYY-MM-DD HH24:MI:SS') ,TO_CHAR(T.START_DATE,'YYYY-MM-DD HH24:MI:SS') ,S.LAST_CALL_ET ,S.BLOCKING_SESSION   ,S.STATUS,( SELECT Q.SQL_TEXT FROM    V$SQL Q WHERE  Q.LAST_ACTIVE_TIME=T.START_DATE AND    ROWNUM<=1) AS SQL_TEXT
FROM   V$SESSION S, V$TRANSACTION T
WHERE  S.SADDR = T.SES_ADDR;

结果如下:

若想 kill 该 DML 语句,可执行:

ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; //SID,SERIAL# 替换成上面查到的值

即:

alter system kill session '67,20514';

注意:PRD 环境不要轻易 kill DML语句,需谨慎处理!

我们再做进一步测试

先回滚:

然后重新开始事务:

delete from table1 where ID=3;
insert into table2 values (5,'NEW');

查询出当前 session 的 SID如下:

SQL 语句 1 查询出未提交 DML 语句如下:

说明:上述 SQL 语句 1 只查出未提交事务中第一条 DML 语句

再次回滚,继续测试

新建事务:

insert into table2 values (5,'NEW');delete from table1 where ID=3;insert into table2 values (6,'OLD');

查询出当前 session 的 SID如下:

SQL 语句 1 查询出未提交 DML 语句如下:

结论: SQL 语句 1 不是总能查询出未提交的 DML 语句

补充
如果只是想查询出未提交 DML 语句的 SID 和 SERIAL#,也可通过如下语句查询:

select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;

若想 kill 该 DML 语句,执行:

ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; //SID,SERIAL# 替换成上面查到的值

Oracle 查询未提交事务相关推荐

  1. mysql查询未提交事务的sql语句

    mysql查询未提交事务的sql语句,找出未提交事务执行的SQL语句 mysql开启事务后没有提交就退出,事务长时间running状态,进程又处于Sleep状态,有可能后续导致其他事物超时失败 常见原 ...

  2. oracle查看未提交事务

    oracle查看未提交事务 SELECT s.sid,s.serial#,s.event,a.sql_text,a.sql_fulltext,s.username,s.status,s.machine ...

  3. java查询未提交事务的数据_Jfinal同一事务中已插入的数据记录在事务未提前前查询不到?...

    @JFinal 你好,想跟你请教个问题: 使用Jfina事务问题.用法如下 boolean result =Db.tx(new IAtom(){ @Override public boolean ru ...

  4. mysql查询未提交事务_MySQL如何找出未提交事务信息

    前阵子,我写了一篇博客 , 那么在 MySQL 数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下,如果一个会话(连接)里面有一个未提交事务,然后不做任何操作, ...

  5. oracle查询未被选修的课程,关于数据库” 查询选修所有课的学生信息“ exists解法的理解...

    学生选课信息共三个表: S:学生基本信息 sno   sname 95001 李二 95002 王三 95003 赵四 95004 孙小毛 95005 王大侃 C:课程基本信息 cno   cname ...

  6. 基于oracle查询锁表和解锁的处理方法

    1.背景 在日常的工作或者学习中,我们会经常对数据库进行操作,最常使用的数据库莫过于oracle数据,当然在使用数据库的过程中,我们也会经常遇到一些问题,比如锁表.锁表经常发生在一个人对这张表进行插入 ...

  7. oracle统计事务,统计Oracle 查询事务数的方法

    大家好!AningDBA又和大家见面了,今天朋友问我一个问题,把我给问住了,问题听起来很简单,就是查询"每天的事务数". 听到这个问题,大家的第一反映,我相信大部分人会和我一样,首 ...

  8. 订购后如何限制Oracle查询返回的行数?

    有没有一种方法可以使Oracle查询像包含MySQL limit子句那样工作? 在MySQL ,我可以这样做: select * from sometable order by name limit ...

  9. activiti如何最后一次提交事务_MySQL如何找出未提交事务的SQL浅析

    很久之前曾经总结过一篇博客"MySQL如何找出未提交事务信息",现在看来,这篇文章中不少知识点或观点都略显肤浅,或者说不够深入,甚至说部分结论是错误的.下面重新探讨一下这个话题.那 ...

最新文章

  1. MySQL utf8mb4 字符集:支持 emoji 表情符号
  2. Django多进程中的查询错乱问题以及mysql gone away问题
  3. 实现一个可管理、增发、兑换、冻结等高级功能的代币
  4. apache站点优化--限速
  5. android java 打开snd,使用SndPlaySound从内存中播放WAV
  6. 求10 个整数中最大值
  7. One Switch for Mac(系统功能快速切换工具)
  8. 面试题:不使用其他变量交换两个数字
  9. 【Xamarin挖墙脚系列:卸载不彻底的解决】
  10. visual studio怎么让button一直生效_民用建设工程设计合同怎么生效
  11. 点击area不出现黑框_黑框淋浴房,黑得高级,黑得漂亮!
  12. LeetCode c语言解题思路+答案代码+多种解法+关键注释 GitHub持续更新
  13. 地平线谭洪贺:AI芯片怎么降功耗?从ISSCC2017说起
  14. Arduino与Proteus仿真实例-74LS138译码器驱动仿真
  15. vue仿微博评论回复_js模拟回帖/微博评论功能案例
  16. form 表单验证验证方法-validate-methods.js
  17. (开源)一款可以发文字发图片的实时聊天微信小程序,可以滚动内容到底部
  18. Windows Server 创建域、加入域、域管理
  19. 微信小程序通过服务号推送模板消息
  20. IEEE 软件单元测试标准

热门文章

  1. C#的5种访问修饰符
  2. python爬取数据总结_2020-10-23Python——网页数据爬取知识总结
  3. 详细记录丨Realtek RTL8188FU WiFi 连接路由
  4. java可变参数(详解+代码样例)
  5. 设置div标签可以输入文字
  6. 52ABP显示报错详情
  7. 软件测试笔记_15_Appium自动化测试框架、操作API
  8. (vue)数组对象去重
  9. Errors running builder 'Integrated External Tool Builder' on project 'rVoix'
  10. word 中简单插入美观的代码