举个小例子:在酒店里2个人同时用机器预定同一时段的一个房间,由于这个时候在写数据库但是不上锁,不阻塞读的情况下他们2个人都会显示预定成功。这样的情况在oralce中会出现,但是在sql server和sybase里是不会存在的,因为他们2个写的时候会给行上锁,不允许读。
但是oralce写不阻塞读的机制当然有他非常大的好处。
如果把象这样的在sql server中运行顺利的例子应用移植到oralce,并简单的认为他也能同样的工作,结果可能让人震惊。由于oracle会在行级锁定,并提供了非阻塞读,所以看上去一切都乱七八糟。这样的情况必须使用for update子句来完成串行访问。如果没有这个子句句,2个用户就可能会同时调度同一个资源。如果不了解所用数据库在多用户环境中如何工作,就会导致这样的结果。