我有一个表(PROCESSED_RECS),它被多个进程(大约 60 个)访问。他们都在这个文件中插入了rec。
目的:
- 进程采用 key 的输入文件进行处理
- 它们检查 key 是否已被处理 - 即在表 PROCESSED_RECS 中
- 要进行检查,进程只需触发 INSERT 查询
- 如果他们在 Oracle 中收到重复错误,他们就会知道该错误已被处理。
但是我收到错误
ORA-00060: deadlock detected while waiting for resource
实现上述场景的最佳实践是什么?
我正在使用 PRO C
和 C
语言
最佳答案
设置一个进程从文件中读取 key 并将其存储在队列 (AQ) 中。这 60 个进程可以安全地将 key 排入队列,并且不需要执行任何检查 key 是否已被处理。 两个进程不可能获得相同的 key 。如果某个进程失败,它将回滚,并且其他进程可以使用该 key 恢复。
一般最佳实践是,SQL 不太适合 DIY 队列实现。
关于c - 多个进程访问单个表进行插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31493669/