JDBC适配器选择和更新查询期间的数据不一致

2020-09-10 16:21发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有关于发件人JDBC通道中SELECT和UPDATE查询的执行的查询。 考虑下面的一个示例,该示例包含100条记录,并且flag = unread:

1。 在10:00:00 AM,SELECT查询读取带有flag ='unread'

的100条记录

2。 在10:00:01 AM,某些程序插入了10个带有flag ='unread'的新记录

3。 在10:00:02 AM,执行Update查询并更新了带有flag ='unread'

的110条记录

这将导致数据不一致,因为它仅需要更新100条记录,而正在更新110条记录。 我们如何确保Update查询仅更新SELECT查询读取的那些记录。

此致

Shankul

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我有关于发件人JDBC通道中SELECT和UPDATE查询的执行的查询。 考虑下面的一个示例,该示例包含100条记录,并且flag = unread:

1。 在10:00:00 AM,SELECT查询读取带有flag ='unread'

的100条记录

2。 在10:00:01 AM,某些程序插入了10个带有flag ='unread'的新记录

3。 在10:00:02 AM,执行Update查询并更新了带有flag ='unread'

的110条记录

这将导致数据不一致,因为它仅需要更新100条记录,而正在更新110条记录。 我们如何确保Update查询仅更新SELECT查询读取的那些记录。

此致

Shankul

付费偷看设置
发送
4条回答
软件心理学工程师
1楼 · 2020-09-10 17:19.采纳回答

您好Shankul!

831162-常见问题解答:XI 3.0/PI 7.0/PI 7.1/PI 7.3 JDBC适配器:

8。 事务处理(发送方)

问:如果我在JDBC发送方中配置了以下内容,请执行以下操作: 选择查询: SELECTNAME从TABLENAME WHERE FLAG =" TRUE" 更新查询: UPDATE TABLENAME SET FLAG =" FALSE",WHERE FLAG =" TRUE" 我怎么知道JDBC适配器不会更新在初始SELECT查询中未读取的新添加的行(在执行SELECT和UPDATE查询的时间范围之间添加的行)?

A:SELECT和UPDATE在同一个数据库事务中运行,即两个语句在数据库上的视图相同。 确保两个语句使用相同的WHERE子句。 这种情况下正确操作的另一个要求是在数据库上配置适当的事务隔离级别(即repeatable_read或可序列化)。 您也可以考虑使用" SELECT FOR UPDATE"语句代替普通的SELECT语句,以确保正确锁定数据库。 MS SQL数据库中不支持" SELECT FOR UPDATE"。 在这种情况下,请在数据库上使用适当的事务隔离级别。 有关更多详细信息,请与您的数据库供应商联系。 如果您的源数据库是IBM i的DB2,请阅读SAP注释 2295028

关于,Evgeniy。

SAP砖家
2楼-- · 2020-09-10 17:05

我以前在我们的一个项目中遇到过这个问题。

解决方案是-

1。 在适配器中使用"可序列化"。

2。 创建表时,从中获取数据的JDBC表应使用INITRANS和ROWDEPENDENCIES子句。

这将确保您的数据一致。

谢谢

< p> Apu

SAP小菜
3楼-- · 2020-09-10 17:01

您好Shankul,

同意Evgeniy和Apu。

1)在您的频道中->高级标签-> "事务隔离级别"设置为可序列化。

2)确保SELECT和UPDATE语句的WHERE子句相同。

感谢

Nidhi Srivastava

哎,真难
4楼-- · 2020-09-10 17:16

大家好,

我们正在使用这种方法从数据库中选择记录,并将标志更新为P(正在处理)并发布Idoc。

发布Idoc后,ABAP代理将从Idoc的行项目中收集所有主键,并将其发送给PO。 PO将创建多个更新查询,并以批处理方式将其发送以执行。

作为响应,成功记录和失败记录可能混合在一起。

对于成功记录,代理将不会发送成功记录的数据,而只会为标志中的错误记录E(错误)以及字段中的错误描述发送错误记录。 PO将在数据库中更新这些错误记录以及错误描述,以便可以在下次运行之前对其进行更正。

关于

Shankul

一周热门 更多>