数据库可用性损失及其含义
DPM 解决方案使用两个数据库:最初部署 DPM 解决方案时创建的 DPM 数据库,以及 ThingWorx 数据库。数据库可能因多种原因 (例如常规数据库维护、网络连接损失或磁盘故障等) 而变得不可用。在数据库不可用的情况下,可能导致通过数据自动化传入的数据丢失,或是数据重复。
如果丢失或重复的数据中包含作业单、物料主数据或目标数量事件,则可针对不正确的作业单或物料记录后续事件和计数。
如果丢失或重复的数据中包含产品计数或次品计数事件,则产品计数器和次品计数器的值可能会不正确。对于滚动计数器,这会带来负面连锁反应。有关滚动计数器的详细信息,请参阅设置数据自动化
在数据库不可用时,大多数情境下会发生数据丢失或数据重复,而 DPM 和 ThingWorx 都内置有相应的进程,这样可有效避免数据丢失或数据重复:
如果 DPM 数据库在批处理过程中的任意时间点不可用,则批处理会在该时间点退出。PTCLastProcessedEventTimestamp 属性设置为上次成功处理的事件的时间戳。下次触发自动化事件计时器时,查询未处理事件数据的值流。处理时间戳晚于当前 PTCLastProcessedEventTimestamp 属性值的所有事件,其中包括在批处理先前退出时系统尚未处理的事件。
如果 ThingWorx 数据库不可用,则系统会将事件数据写入值流队列。ThingWorx 具有重试机制,可用来重新建立与数据库的连接。如果数据库可用,则系统会将值流队列中的条目添加到值流中。
本主题介绍了在数据库不可用时可能导致数据丢失或数据重复的不常见情境,提供了可执行哪些操作来确定何时发生这些情况的相关信息,以及如何解决由此带来的数据问题
数据自动化工作流
为了更好地掌握这些情境,了解用于处理数据自动化中事件数据的总体工作流很有用。以下工作流的后面是为实现数据自动化而配置的各个定拍单元:
1. 通过数据自动化工作流接收事件数据。良好质量数据写入值流队列。队列中的条目添加到值流中。
2. 触发自动化事件计时器,批处理开始:
a. 查询未处理事件数据的值流。未处理的事件是指时间戳晚于当前 PTCLastProcessedEventTimestamp 属性值的事件。
b. 按顺序处理针对每个时间戳查询的事件。
c. 对产品计数和次品计数进行缓冲,以将计数合并到每个计数器的组中。
d. 分组后的计数被插入到 DPM 数据库中。
3. 成功处理各个事件后,PTCLastProcessedEventTimestamp 属性会更新。对于产品计数和次品计数,只有将所有分组后的计数都插入到该数据库中后,才会更新 PTCLastProcessedEventTimestamp 属性。将所有缓冲组中的最新时间戳设置为 PTCLastProcessedEventTimestamp 属性值。
情境
下表介绍了可能会导致数据丢失或数据重复的不常见情境。请知晓,数据自动化工作流发生在为实现数据自动化而配置的各个定拍单元上。根据情境发生的时间,此类情境可能会影响某些定拍单元而不影响其他定拍单元。
情境
说明
结果
在处理时间戳相同的多个事件时,DPM 数据库变为不可用。
通过数据自动化工作流接收的每个事件都有一个时间戳。在极少数情况下,多个事件可能有相同的时间戳。在这种情况下,时间戳相同的事件按以下事件类型依次处理:作业单、物料主数据、目标数量和可用性、产品计数和次品计数。
如果存在多个时间戳相同的事件,则在处理带有该时间戳的第一个事件后,会更新 PTCLastProcessedEventTimestamp 属性。
如果在成功处理时间戳相同的所有事件之前,DPM 数据库变为不可用,则会丢失带有该时间戳的所有未处理事件,其中包括带有该时间戳的产品计数和次品计数事件。这是因为下次触发自动化事件计时器时,批处理会查询时间戳出现在当前 PTCLastProcessedEventTimestamp 属性值之后的事件。
PTCLastProcessedEventTimestamp 属性的时间戳相同的所有未处理事件 (其中包括产品计数和次品计数事件) 丢失。
ThingWorx 数据库不可用,值流队列已满。
当 ThingWorx 数据库变为不可用时,来自数据自动化的事件将继续添加到值流队列中,直到达到其队列大小。当 ThingWorx 数据库再次变为可用时,系统会处理值流队列,以将条目添加到值流中,在下次触发自动化事件计时器时,会在批处理过程中查询这些条目。
如果值流队列已满,则系统会拒绝来自数据自动化的任何新事件。
被拒绝的事件丢失。
ThingWorx 数据库不可用,且 ThingWorx 服务器重新启动。
重新启动 ThingWorx 服务器时,值流队列和持久化队列中的所有内容均丢失。已添加到值流但尚未处理的条目将被保留。
值流队列和持久化队列中的所有数据均丢失。
ThingWorx 数据库不可用,连接重试计数已耗尽,ThingWorx 关闭。
当为 ThingWorx 数据库重试机制配置的重试次数耗尽时,ThingWorx 服务器关闭。有关 ThingWorx 重试机制的详细信息,请参阅 ThingWorx 帮助中心中的在 ThingWorx 中存储数据
值流队列和持久化队列中的所有数据均丢失。
ThingWorx 关闭时,来自数据自动化的所有新事件均丢失。
在处理持久化队列以更新 PTCLastProcessedEventTimestamp 属性之前,ThingWorx 数据库变为不可用,且 ThingWorx 服务器重新启动。
如果在处理持久化队列以更新 PTCLastProcessedEventTimestamp 属性之前,ThingWorx 数据库变为不可用,且 ThingWorx 服务器重新启动,则持久化队列的内容将丢失。PTCLastProcessedEventTimestamp 属性值保留其前一个值。也就是说,对于时间戳出现在 PTCLastProcessedEventTimestamp 属性值之后且已进行处理并添加到 DPM 数据库的事件,会对其进行重新处理并将其重新添加到数据库。
重新处理的事件会创建重复数据。
识别数据库可用性事件
您可以通过以下两种方式识别数据库可用性事件导致数据丢失或数据重复的情况:
在生产期间监控生产仪表板。若当前生产区块和展开的事件日志中显示的数据不正确,自动化定拍单元的操作员可加以识别。
查看 ThingWorx 日志中记录的数据库不可用错误,尤其是当您意识到数据库维护或可能会影响数据库可用性的其他操作时。识别受影响的定拍单元并检查“生产仪表板”中的数据,以查看是否存在丢失或重复的数据。
解决数据问题
虽然没有一种策略能保证避免这些极少数情境,但可以在出现这些情境时采取一些措施予以解决。
重置各个定拍单元的不正确产品和次品计数器:
1. 停止 Kepware 服务器。
2. 在 ThingWorx Composer 中,导航至定拍单元事物。
3. “属性”下,向 PTCLastAutomationProcessedValues 属性信息表中添加行,并为要重置的每个计数器输入以下信息:
propertyName - 对于产品计数器,请输入 PTCPoductionCount。对于次品计数器,请输入次品属性的名称。
value - 要为计数器重置的值。
jobOrderUid - DPM 将忽略此字段。
4. 启动 Kepware 服务器。
有关产品计数器和次品计数器的详细信息,请参阅设置数据自动化
通过生产仪表板手动输入单个定拍单元的缺失数据。对于在过去 24 小时内进行的生产,可以手动输入每个定拍单元在过去 24 小时内发生的损失事件、产品计数和次品计数。此外,还可以最多添加一周的历史次品事件。
通过生产仪表板手动移除单个定拍单元的重复产品计数。对于当前生产区块,可以从“生产仪表板”的“生产条目”窗格中移除产品计数。要移除过去 24 小时内的产品计数,可以使用“时间损失核算”窗口。
这对您有帮助吗?