这是我遇到的一个非常独特的问题。让我从给你详细信息开始:
我们有父包(我们称之为 A)设计用于处理部分和全部处理的多维数据集。现在,这个包调用了另外两个包(比如 B、C),一个用于加载暂存数据,一个用于处理多维数据集。
几周前,我们开始遇到连接问题,因此所有多维数据集的处理都失败了。从那时起,这种情况每周发生一次或两次。显然 SQL 服务器无法建立连接(仅几秒钟)。但是这种连接丢失会使所有剩余的多维数据集处理失败。
现在解决这个问题的唯一方法是重新启动父包。在重新启动整个包之前,我们运行一个脚本来更新已处理多维数据集的标志。这有助于我们跳过已经成功处理的多维数据集。
所以我一直在尝试设计这个子包(负责多维数据集处理),如果多维数据集失败,它会自动发送以进行重新处理。以下是我使用的逻辑:
在这我所做的是将这个进程立方体任务放在一个for循环容器中并将计数器设置为2。如果立方体失败计数小于2,它将尝试重新处理,如果失败计数大于2,它退出循环并使该多维数据集的处理失败。通过将重试次数限制为 2,我们避免了在出现数据问题并且多维数据集每次都失败时可能发生的无限循环的风险。
但这并不能解决我的问题,因为多维数据集已经获取了一个线程并且将重新处理是同一个线程而不是新线程。为了解决连接问题,它必须获得一个新线程。
现在来回答我的问题,
我如何设计这个包,如果多维数据集失败,它会触发在新线程中重新处理多维数据集,或者更好的是,停止包,在运行脚本以更新标志并重新处理多维数据集后再次运行父包。这甚至可能吗?还是有更好的方法来解决这个问题?
我以前从未遇到过这个问题,所以我对如何进行有点困惑。因此,任何帮助将不胜感激。