可以参考这篇博文:说得很详细。
http://blog.csdn.net/wh62592855/article/details/4688656

解决方案 »

  1.   

    TX是行级或者说是事务级别的,TM是表级的。锁的粒度不一样;
    粒度大的(比如表级)并发度就小,但使用的资源也少了,反之,粒度小的(比如行级),并发度是大,但同时消耗的资源也大。
    所以说选择锁的粒度应该权衡并发度和系统开销;回到lz的问题,TM当然有存在价值,因为有时候出去系统资源的考虑,不必用TX
      

  2.   

    TX是行级或者说是事务级别的,TM是表级的。锁的粒度不一样;
    粒度大的(比如表级)并发度就小,但使用的资源也少了,反之,粒度小的(比如行级),并发度是大,但同时消耗的资源也大。
    所以说选择锁的粒度应该权衡并发度系统开销;回到lz的问题,TM当然有存在价值,因为有时候出于系统资源的考虑,不必用TX
      

  3.   

    楼上两位说的都是TM锁和TX锁的差别,这是没有疑问的,我的疑问在于TM锁和DDL锁。在一个事物获得一个TX锁的同时会获得一个TM锁,为什么不能获取一个DDL锁?因为在防止表被其它事务更改的目的上,此时的TM锁和DDL锁是一样的,那么TM锁存在的意义是什么?
      

  4.   

    是否可以这么理解:TM锁只是限制不能更改表结构,但DDL锁除了限制不能更改表结构,也限制不能更改表的记录数据?
      

  5.   

    DDL和DML 操作都会产生锁,都表现为TX和TM锁 ,你自己可以做实验,只是V$LOCK中的lmode(锁模式略有不同)
      

  6.   


    那么是否可以这么理解:TX锁是限制行数据不被更改(可能是N行),TM锁是限制表结构不被更改?DDL操作必然锁住整表限制数据和结构都不能更改,而DDL操作只限制有限条数的记录和表结构不能更改?
      

  7.   

    我也有这个疑问,像TM2和共享DL锁效果不就完全一样?之所以又搞出一个DL锁出来,不深入考虑的话,大概是让人在查询v$lock视图时,能一眼发现是因为DML还是DDL而产生锁定吧