我有一个oracle数据库。我使用OracleDataAdapter(Oracle.DataAccess.dll)进行选择,更新,插入,删除操作。我没有自己设置任何(表)锁(我只开始一个事务)。我有一个名为“test”的oracle表,其条目为“test1”。
现在我的问题:
当B人在同一时间更新/删除该条目时,人A可以读取条目“test1”吗?
在最坏的情况下会发生什么?旧匹配/空匹配或是否会导致任何类型的异常/错误(例如“TableLocked-Exception”)?
谢谢
答案 0 :(得分:1)
在Oracle中,读者不会阻止作者。因此,一个会话可以在另一个会话正在更新或删除该行的同时读取一行。读者将看到查询开始的系统更改编号(SCN)中存在的行。
只有两个会话同时尝试更新或删除同一行时才会出现阻塞的唯一时间。这通常不会产生任何例外。相反,无论哪个会话等待锁定都会阻塞,直到保持会话通过结束其事务来释放锁定。如果您指定等待锁定的超时,或者Oracle检测到您的代码已经死锁并且必须终止其中一个死锁会话以解决问题,则可能会出现异常。