0

我正在使用 batchUpdate 插入 Oracle 表。五个不同的并行线程正在调用 batchUpdate 方法以插入单个表。表是全局临时表类型。

程序执行未完成,建立数据库连接后卡住。

多个线程在单个全局临时表上操作会导致表锁定并保持程序的执行吗?

我可以使用以下查询查看锁定的表 -

 select object_name, object_type from all_objects where object_id in (select object_id from v$locked_object);
4

2 回答 2

2

是他们会。

如果 2 个不同的会话同时更新同一个表,则第二个会话将无法访问该表,直到第一个表完成更新(执行 COMMIT)。第一个会话实际上在该表上部署了一个“LOCK”,直到它完成更新。

您不能真正通过两个线程同时更新完全相同的数据块,可以吗?

这是保持数据一致性的 ORACLE 功能。

于 2014-05-21T06:24:09.300 回答
0

请发送该查询的输出。Oracle 支持多种类型的锁。其中一些可以共享(例如 TM 的)。您在 v$locked_object 视图中看到某些内容这一事实并不意味着某些会话被阻止。

很可能您的表仅针对 DDL (ALTER TABLE) 语句锁定。但不适用于 DML。

于 2014-05-23T09:12:34.453 回答