如何看回滚段的回滚进度

我们在rollback一段DML操作或DML操作失败后,都会自动进行回滚。所以你必须耐心等待事务回滚结束后,才能再次进行DML操作,否则将会死锁。但是回滚是系统自动完成的,我们应该如何去得知回滚进度呢?看下面的实验

1. 新建一个千万级数据量表test2;

2. 删除test2

    DELETE FROM test2;

3. 观察事务使用数据块的情况:

    SELECT t.USED_UBLK,t.XIDUSN FROM v$transaction t;

4. 当使用了上百万的数据块后,我们点击小闪电中断操作(注意点击小闪电后貌似没反应,其实就开始回滚了,此时在v$session中还是能查到删除动作的session,此时它并不是在删除,而是在回滚。这跟你在sqlplus里执行脚本,然后关闭窗口的原理一样,不要错误认为,你明明关了窗口,为什么操作还在进行,其实它已经中断了,而是在回滚!),在接着看

    SELECT t.USED_UBLK FROM v$transaction t;

你会发现USED_UBLK越来越少,这表示它就在回滚,直到变成0为止。会发现这样一种现象:事务越大(USED_UBLK越大),回滚的越慢!所以在做大数据量DML操作时,一定要考虑到这个风险:万一失败,回滚的时间将很漫长!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值