一部のデータを集計し、結果を効率的なクエリに使用する別のテーブルに挿入するプロセスがあります。私たちが直面している問題は、複数のアグリゲーターがほぼ同時に実行されていることです。
この新しいテーブルでは、元のレコード ID を主キーとして使用します (一意の制約)。ただし、2 つの集計プロセスが同時に実行されている場合、そのうちの 1 つが一意制約違反でエラーになります。
最初のライターが終了するまで 2 番目のライターを待機させるロック機構を指定する方法はありますか? または、その特定の行を無視して残りを続行するようにオラクルに指示する方法はありますか?
残念ながら、集計を単一のプロセスに減らすことは現実的ではありません。次の手順は、利用可能なデータの最新バージョンに依存しており、これらの手順はスケールアウトする必要があるためです。
編集:
以下は私の[編集済み]クエリです。
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)