日期:2014-05-17  浏览次数:20837 次

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

非常感谢!

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

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