enq:TM-contention等待的发生,发生TM锁争用的情况如下:
    
    1、修改无索引外键(foreign key)的父键时
    2、DML与DDL之间的TM争用
    3、LOCK TABLE 引起的TM锁争用
    4、direct load工作引起的TM锁争用
http://blog.itpub.net/7194105/viewspace-704114/

解决方案 »

  1.   

    7.1.4 执行direct/parallel load工作时
         
         insert/*+*append/ into或sql*loader的direct path load之类的部分功能,对于相应表以exclusive模式获得tm锁,direct load
     工作不经过sga,而是直接写入到数据文件里,所以在执行工作期间不运行对表进行任何修改。得到保障,工作才能得以继续。
         
         direct load工作在执行期间,不运行对于表执行任何DDL或DML.因此事务多的时刻执行direct load工作时,需要确认TM锁
         争用是否可能引发的问题。
      

  2.   

    当Oracle 执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,楼上bw55兄弟所说的/*+*append/加载或者直接路径加载会在表上以exclusive模式获得tm锁,那么你在update在获取TM锁的时候就需要等待了。就出现了enq: TM – contention事件
      

  3.   

    这种情况我也知道会引发TM等待,但是程序里面并没有用/*+append*/这样的hint呀,还有其他可能性导致直接加载数据吗??
      

  4.   

    表A上没有任何外键,那是不是A表上建了不合理的索引(比如oltp系统里面建了bitmap索引,很容易
    引起大片数据更新插入死锁),导致update的时候引起锁。