监控一个大事务的回滚
SQL> select * from v$lock where type in ('TM','TX');ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- 0ED0F30C 0ED0F33C 9 TM 13865 0 3 0 3757 0 2C3975FC 2C39763C 9 TX 65557 677 6 0 3757 0SQL> select object_name,object_type from dba_objects where object_id=13865;OBJECT_NAM OBJECT_TYPE ---------- ------------------- SAMPLE TABLE因为表上存在TM-3锁,所以此时是无法对表执行需要持有TM-6 exclusive排它锁的DDL操作的SQL> drop table sample; drop table sample* ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expiredSQL> select * from sample where rownum=1 for update nowait; select * from sample where rownum=1 for update nowait* ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expiredrollback完成之前相关行上的row level lock不会被释放,因此dml操作会被blockSQL> select xidusn,xidslot,xidsqn,status from v$transaction;XIDUSN XIDSLOT XIDSQN STATUS ---------- ---------- ---------- ----------------1 21 677 ACTIVE从v$tranasction视图中可以看到事务1.21.677处于active状态使用set time on命令显示当前时间SQL> set time on;20:54:26 SQL>set serveroutput on set feedback off prompt prompt Looking for transactions that are rolling back ... promptdeclarecursor tx isselects.username,t.xidusn,t.xidslot,t.xidsqn,x.ktuxesizfromsys.x$ktuxe x,sys.v_$transaction t,sys.v_$session swherex.inst_id = userenv('Instance') andx.ktuxesta = 'ACTIVE' andx.ktuxesiz > 1 andt.xidusn = x.ktuxeusn andt.xidslot = x.ktuxeslt andt.xidsqn = x.ktuxesqn ands.saddr = t.ses_addr;user_name varchar2(30);xid_usn number;xid_slot number;xid_sqn number;used_ublk1 number;used_ublk2 number; beginopen tx;loopfetch tx into user_name, xid_usn, xid_slot, xid_sqn, used_ublk1;exit when tx%notfound;if tx%rowcount = 1thensys.dbms_lock.sleep(10);end if;selectsum(ktuxesiz)intoused_ublk2fromsys.x$ktuxewhereinst_id = userenv('Instance') andktuxeusn = xid_usn andktuxeslt = xid_slot andktuxesqn = xid_sqn andktuxesta = 'ACTIVE';if used_ublk2 < used_ublk1thensys.dbms_output.put_line(user_name ||'''s transaction ' ||xid_usn || '.' ||xid_slot || '.' ||xid_sqn ||' will finish rolling back at approximately ' ||to_char(sysdate + used_ublk2 / (used_ublk1 - used_ublk2) / 6 / 60 / 24,'HH24:MI:SS DD-MON-YYYY'));end if;end loop;if user_name is nullthensys.dbms_output.put_line('No transactions appear to be rolling back.');end if; end; /MACLEAN's transaction 1.21.677 will finish rolling back at approximately 21:46:45 25-MAY-2011以上脚本给出了估计的1.21.677事务的回滚结束时间为21:46:45,即还有50分钟, 注意这只是根据之前单位时间内rollback的进度所得到的一个估算值,所以并不精确,但还是可以做为一个参考再次运行以上脚本,会发现2次的结果不一定一致SQL> / MACLEAN's transaction 1.21.677 will finish rolling back at approximately 21:35:47 25-MAY-2011
在产品数据库中应当尽可能避免出现大事务回滚的现象,因为除去lock的影响外,large transaction rollback还会导致CPU使用率大幅上升并产生往往比事务本身所产生的更多的redo重做日志记录。
转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2967782.html
监控一个大事务的回滚相关推荐
- oracle修改卡顿,记一次生产环境卡顿优化过程:大事务并发回滚
概述 最近生产环境有这么个现象,平时的订单调度只需要2s内可以出结果,但是多个人调度就会卡住,超过15分钟都没有结果出来,有时还会失败然后导致数据不准确. 下面记录一下生产环境卡顿时排查的过程. 1. ...
- sqlsever回滚操作_sqlserver事务与回滚
如果要在Production执行数据改动必须小心,可以使用事务提前验证一下自己写的SQL是不是你期望的.尤其是Update的where 条件有问题的话,跟新的记录就会超出预期的范围.如下面的语句,一着 ...
- 为什么catch了异常,但事务还是回滚了?
前几天我发了这篇文章<我来出个题:这个事务会不会回滚?>(https://blog.didispace.com/will-this-transcation-rollback/) 得到了很多 ...
- java 自定义异常 未回滚_抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- 每日一博 - 常见的Spring事务失效事务不回滚案例集锦
文章目录 事务不生效 方法内部调用 修复方法一 : [新加一个Service方法] 修复方法二:[在该Service类中注入自己] 修复方法三:[通过AopContent类]<---- 推荐 访 ...
- 【node】express中mysql的基本用法、连接池的使用、事务的回滚
[node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...
- spring@Transactional注解事务不回滚不起作用无效的问题处理
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...
- springboot 事务手动回滚_Spring Boot中的事务是如何实现的
1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...
- Spring 事务不回滚
为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚. 例: 类似这样的方法不会回滚 (一个 ...
- @Transactional注解事务不回滚不起作用无效
@Transactional注解事务不回滚不起作用无效 以下内容均来自http://blog.csdn.net/u011410529/article/details/54287307 转载 这几天在项 ...
最新文章
- [ARM-assembly]-ARM64汇编语言学习笔记
- Vue中foreach数组与js中遍历数组的写法
- 【.Net Framework 体积大?】不安装.net framework 也能运行!?开篇叙述-1
- C++ map基本操作
- kali下sqliv:SQL注入URL扫描器
- springboot项目中mybatis实现数据的基本查询
- unrecognized selector sent to instance问题的解决
- java调用libreoffice_使用Open / LibreOffice开始使用UNO和Java
- 分享6个国内优秀Java后台管理框架的开源项目,建议收藏!
- 计算机逻辑门电路图,三态门逻辑电路图大全(三款三态门逻辑电路图)
- 星上SAR实时处理调研2-典型应用
- 国内学术科研论坛整理
- 分位数回归(Stata)
- 网络安全界巨擘 王江民
- 超声波模块的原理介绍之时间函数和digitalRead函数的使用
- Springboot RestTemplate post/get请求所有情况
- 终于学会数组的使用啦~~~------C语言数组学习笔记详解
- tomcat 做为大型应用的配置
- Could not find any downloads that satisfy the requirement opencv-python
- 便利店新零售怎么做,才能实现销售额倍增?
热门文章
- 《专家系统破解篇 六、IL代码破解--配套乱说》之 FeatherskyExpertSystem
- Android Studio R类找不到(Mac)
- Caused by: java.lang.ClassNotFoundException: Didn’t find class on path apk Android Studio解决方案
- [2018.11.03 T3] 单调序列
- BZOJ3757 苹果树
- Ajax学习笔记-get请求参数-3
- lvcreate 创建逻辑卷
- Java中字符串的全部知识_java基础教程之字符串的介绍,比较重要的一个知识点「中」...
- python字符串转为ascii码_Python学习经验:无重复字符的最长子串
- 手动创建线程池_创建线程池