oracle savepoint 存在,rollback to savepoint 的问题。

session1 (sid 127):savepoint a;

update t1 set id=66 where id=6;

session 2(sid 136):

update t1 set id=666 where id=6;

session 1:

rollback to a;

这时,session 2 还是被阻塞中。

新开session3:

SQL> select * from v$lock where sid in (127,136);

ADDR         KADDR                 SID TY        ID1          ID2           LMODE    REQUEST         CTIME            BLOCK

-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

3C43434C 3C434360         136 TX     786474          151               0          6          2833                0

3C37AB88 3C37ABA0         136 TM      53420            0               3          0          2833                2

3C3CAB10 3C3CAB34         127 TX     786474          151               6          0          2886                1

dump 信息:

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x0009.027.00000245  0x00806d99.01f7.14  C---    0  scn 0x0000.00224cd2     --->这个原来就有跟实验无关,况且标志C代表已经COMMIT,所有锁释放。

0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x04   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x05   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

Dump 发现,在块头已经没有相关事务ITL信息。但是v$lock中还是持有TX锁,导致阻塞。但不影响新开session的DML操作。

oracle文档说锁是存储在数据块中的,但是既然没有了锁的信息。为何还会导致阻塞?

难道说session此时需要获取的并不仅仅是数据块中的锁,还需要别的什么吗?

文档中也没有说清楚到底是怎么回事,只是说交易排队问题(Enqueued Transactions) .还是没有真正弄清楚里面的过程和机制。

请教。多谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值