我正在做插入到Oracle表使用batchUpdate。五个不同的并行线程调用batchUpdate方法将数据插入到单个表中。表为全局临时表类型
程序执行未完成,建立数据库连接后卡死
在一个全局临时表上操作的多个线程是否会导致表锁并导致程序无法执行?我可以看到锁的表使用下面的查询-
select object_name, object_type from all_objects where object_id in (select object_id from v$locked_object);
会的。
如果两个不同的会话同时更新同一个表,则第二个会话将无法访问表,直到第一个表完成更新(执行COMMIT)。第一个会话实际上在该表上部署了一个'LOCK',直到它完成更新。
你不可能在同一时间用两个线程更新同一个数据块,不是吗?
请发送该查询的输出。Oracle支持多种类型的锁。其中一些可以共享(例如TM)。你在v$locked_object视图中看到一些东西并不意味着某个会话被阻塞了。
很可能你的表只对ddl (ALTER table)语句被锁定。