oracle支持并行处理,提供了如表级锁、行级锁等。
1. 哪位能帮忙介绍下插入、查询及删除操作时,分别会用到哪些锁?
2. 三个线程同时对一个表分别执行插入、查询及删除操作时,oracle是否会并行处理,还是要等一个操作完成后再进行另一个操作?非常感谢!

解决方案 »

  1.   

    1.锁类型
    TM: DML or table lock(所有的插入,删除,更新都被称为DML操作;查询时不会产生锁)
    TX: transaction lock
    2.查询就无所谓了,不会有锁。
    除了查询,其他操作,ORACLE不会并行处理,只能等待其中一个操作完成后,再进行下一个操作。
    例:线程1对表A做插入操作的时候,并且还没有提交的时候,会同时产生TM和TX两种锁,其它线程不能对表A做DML操作;当线程A提交后,把表A的锁释放出来,其他的线程才可以依次对该表继续做DML操作。在这期间,任何其他线程执行查询是可以的。不会有锁
      

  2.   

    查询时,好像也会产生锁,是共享锁。
    删除,插入时,是排他锁。
    只要互相操作的不是同一个字段,oracle会并行处理,它具有多态性,不需等待~
    貌似是这样,你google一下~~
      

  3.   

    通常的数据库中是有排它锁和共享锁的,排他锁在对数据库进行更新、插入或者删除时添加的,共享锁在选择时添加的。但是oracle的实现机制不太一样,只有排他锁,没有共享锁,而且这个共享锁是基于元组的,也就是只要线程不是对同一行进行DML,就是可以并行的,否则就需要等一个线程完成后才可以执行。另外,oracle执行查询语句时是查询未提交的语句。所以不用加锁,只要能判断出哪些是已提交的,哪些是未提交的即可。
      

  4.   

    用户进程根本不会直接操作到数据库本身。
    在select,update,delete ..等操作时,系统首先会去缓存区里找用到的信息,如果有直接作业,没有的话会把用到的信息从数据库里提取到缓存区。然后DBWn进程会不定时的把缓存区的信息提交到数据库。所以缓存区里既有已提交但还没来得及写入数据库的信息,也有已经回滚但数据库还没撤销的数据。总体来说,最终oracle会写入已提交的数据,回滚未提交的数据,保持数据一致性。
      

  5.   

    你可以看下oracle concepts 第四章 事务管理 和第14章 并发和一致性,就一目了然了,这么听别人讲估计你还是迷糊