gpt4 book ai didi

Oracle - 如何知道批量插入已经结束?

转载 作者:行者123 更新时间:2023-12-02 11:39:27 26 4
gpt4 key购买 nike

我们在 Oracle 数据库中有一个表,充当两个系统之间的中介。系统 A 将对表进行批量插入,每 50,000 行提交一次。系统B会不断查询表中是否有记录,如果有,就会发出SELECT .. FOR UPDATE语句来处理记录(系统B是多线程的)。

问题是,当系统 B 查询表时,系统 A 仍有可能批量插入数据。这可能会导致系统 B 获取不完整的数据集进行处理。

我们是否可以知道批量插入是否已停止?如果我们想监控表上是否有insert事件完成,可以吗?不幸的是,我们无法控制系统 A 的工作方式,因此我们无法让它向我们发送任何“结束”信号。

如有任何意见,我们将不胜感激。谢谢。

最佳答案

甲骨文将 automatically acquire row/table level locks当执行 INSERT 时。

如果系统A在V$SESSION中提供了足够的可见信息,显示所有连接 session 的系统 View ,为了让您能够明确地仅识别系统 A 的 session ,您应该能够查询 `V$LOCKED_OBJECT查找被这些 session 锁定的对象:

select count(*)
from v$locked_object v
join all_objects d
on v.object_id = d.object_id
join v$session s
on v.session_id = s.sid
where d.owner = :owner
and d.object_name = :table_name
and s.<some_identifying_data> = :something

如果系统A正在锁定你的对象,那么你需要继续等待;如果系统 A曾经锁定该对象,但现在不再锁定该对象,那么您可以启动辅助进程。这需要进行测试以确定系统 A 的确切行为。

我知道这不是完全可能的,但更集成的方法是修改系统 A 进程,使其在终止时引发某种形式的事件。您can use this event to start a scheduled job .

关于Oracle - 如何知道批量插入已经结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29619484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com