我们有一个聚合一些数据并将结果插入到另一个表中的过程,该表用于高效查询。我们面临的问题是我们现在有多个聚合器几乎同时运行。
我们使用原始记录 id 作为这个新表中的主键 - 一个唯一约束。但是,如果两个聚合进程同时运行,其中一个会因违反唯一约束而出错。
有没有办法指定某种锁定机制,让第二个作家等到第一个作家完成?或者,有没有办法告诉 oracle 忽略该特定行并继续其余的?
不幸的是,将聚合减少到单个过程是不切实际的,因为以下过程依赖于可用数据的最新版本,并且这些过程确实需要扩展。
编辑:
以下是我的 [已编辑] 查询:
INSERT INTO
agg_table
SELECT
h.id, h.col, h.col2
FROM history h
JOIN call c
ON c.callid = h.callid
WHERE
h.id > (SELECT coalesce(max(id),0) FROM agg_table)