如何以编程方式停止 SSAS 多维数据集处理?

Posted

技术标签:

【中文标题】如何以编程方式停止 SSAS 多维数据集处理?【英文标题】:How to stop SSAS cube processing programatically? 【发布时间】:2016-03-21 13:11:37 【问题描述】:

我们正在使用 Microsoft.AnalysisServices 库来访问我们的 SSAS 数据库(在 SQL Server 2014 上)并以编程方式处理多维数据集。

代码如下所示:

using (var server = new Server())

    server.Connect("someserver");

    if (server.Connected)
    
        var db = server.Databases.FindByName("somedb");

        if (db != null)
        
            db.Process(ProcessType.ProcessFull);
        
    

问题是,完整的多维数据集处理可能需要很长时间(在我们的例子中超过 1 小时)。并且我们需要一种在必要时优雅地停止/取消它的方法(上面的代码是复杂的 Windows 服务的一部分,有时需要重新启动)。

中断任务导致cube不被处理是完全可以接受的。

有没有办法把上面的代码写成非阻塞的?或者以某种方式传递回调?我在 MSDN 文档中找不到任何相关内容:

https://msdn.microsoft.com/en-us/library/microsoft.analysisservices.database.aspx

【问题讨论】:

我不确定这对您有多大帮助,但thinknook.com/… 是一篇关于通过 XMLA 查询杀死 SSAS 执行的文章。 我们对其他多维数据集使用 XMLA 查询,这些多维数据集无法在“完整”模式下处理。到目前为止,这里没有必要。如果没有更好的解决方案,我们可能会重写代码。至少,我们应该能够在处理完每个维度后中断工作。它仍然需要等待,但不是 1 小时。 如果您只是重新启动服务,它会成功取消处理吗?还是只是挂起? 【参考方案1】:

您能否尝试摆脱using 块并让您的serverobject 成为类级别成员。然后在取消线程上试试这个:

server.CancelSession(server.SessionID);

【讨论】:

谢谢!这实际上就像一个魅力。我可以使用相同的服务器对象。然后执行处理的线程将抛出The operation was cancelled by the user 异常,我可以捕获并按照我的意愿继续。我被Database 类所吸引,并没有考虑检查Server @MarcinSynak 太棒了!编辑了我的答案以简化它。感谢您对其进行测试。

以上是关于如何以编程方式停止 SSAS 多维数据集处理?的主要内容,如果未能解决你的问题,请参考以下文章

SSAS 多维数据集处理

通过 XMLA 处理 SSAS 多维数据集

处理 SSAS 多维数据集时发生异常 [重复]

表格 SSAS ImpersonationMode -- 无法处理多维数据集

SSAS 维度属性在多维数据集浏览器 (BIDS) 中不可见

逆向工程多维数据集以使用 SSAS 2008 构建关系数据库