这是我遇到的一个非常独特的问题。让我首先向您提供详细信息:
我们有父包(我们称之为A),用于处理部分和完整处理的多维数据集。现在这个包调用另外两个包(比如B,C),一个用于加载登台数据,另一个用于处理多维数据集。
几个星期前,我们开始出现连接问题,导致所有多维数据集的处理失败。这种情况从那时起每周发生一次或两次。显然,SQL服务器无法建立连接(仅几秒钟)。但是这种连接丢失导致所有剩余的立方体处理失败。
现在解决此问题的唯一方法是重新启动父包。我们运行一个脚本来更新已经处理过多维数据集的标志,然后重新启动整个包。这有助于我们跳过已成功处理的多维数据集。
所以我一直在尝试设计这个子包(负责多维数据集处理),如果一个多维数据集失败,它会自动发送进行重新处理。以下是我使用的逻辑:
在我所做的是,我将此进程多维数据集任务放在for循环容器中并将计数器设置为2.如果多维数据集失败计数小于2,它将尝试重新处理并且如果失败计数更大它超过2,退出循环并且无法处理该多维数据集。通过将重试次数限制为2,我们避免了无限循环的风险,如果存在数据问题并且多维数据集每次都会失败,则可能发生无限循环。
但这并不能解决我的问题,因为多维数据集已经获得了一个线程并且将重新处理是同一个线程而不是新线程。并且为了解决连接问题,它必须获取一个新线程。
现在回答我的问题,
如何以这样的方式设计此包:如果多维数据集失败,它会触发在新线程中重新处理多维数据集,或者更好的是,停止包,在运行脚本后再次运行父包以更新标志和重新处理立方体。这甚至可能吗?还是有更好的方法来解决这个问题?
我以前从未遇到过这个问题所以我有点坚持如何继续。 所以任何帮助将不胜感激。
答案 0 :(得分:0)
我认为在包中添加一些检查点也会有所帮助。它太详细了,无法提供答案,但它可以让您从故障点重新开始尝试此链接
https://www.simple-talk.com/sql/sql-tools/implementing-checkpoints-in-an-ssis-package/