C# 如何以编程方式检查SSAS数据库/多维数据集是否正在处理?
我有一个应用程序,它可以更新一个小维度,并重建一个作为更大立方体一部分的度量值组 早晨的锻炼有时需要一两个小时。我想从应用程序中检查此特定数据库中是否正在进行任何处理,并向用户发送一条消息,告知他们需要等待 我检查过的AMO对象都有一个状态属性,但这似乎只反映了当前的状态,似乎对可能正在进行的处理一无所知。我假设这是因为处理完成后对象被替换 我现在看到的唯一选择是根据启动一个自定义跟踪,让它运行一段时间,并检查是否有任何进度事件 我认为,出于明显的原因,这不是解决我问题的可靠办法。有更好的办法吗?我希望数据库对象上有一个简单的“IsProcessing”标志 另一个可能的想法是查询活动会话DMV,查看命令中是否有“进程”文本。我还是觉得不牢靠C# 如何以编程方式检查SSAS数据库/多维数据集是否正在处理?,c#,.net,sql-server,ssas,olap,C#,.net,Sql Server,Ssas,Olap,我有一个应用程序,它可以更新一个小维度,并重建一个作为更大立方体一部分的度量值组 早晨的锻炼有时需要一两个小时。我想从应用程序中检查此特定数据库中是否正在进行任何处理,并向用户发送一条消息,告知他们需要等待 我检查过的AMO对象都有一个状态属性,但这似乎只反映了当前的状态,似乎对可能正在进行的处理一无所知。我假设这是因为处理完成后对象被替换 我现在看到的唯一选择是根据启动一个自定义跟踪,让它运行一段时间,并检查是否有任何进度事件 我认为,出于明显的原因,这不是解决我问题的可靠办法。有更好的办法吗
感谢所有建议。最好的办法可能是查看是否存在处理锁定。我还没有测试过不同的值,但是我认为如果这个查询返回任何行,那么您的多维数据集正在被处理
SELECT *
FROM $SYSTEM.DISCOVER_LOCKS
WHERE LOCK_STATUS = 1
AND LOCK_OBJECT_ID = '<Object><DatabaseID>YourDatabaseID</DatabaseID></Object>'
AND (
LOCK_TYPE = 2
OR LOCK_TYPE = 4
OR LOCK_TYPE = 10
OR LOCK_TYPE = 16
)
选择*
从$SYSTEM.DISCOVER\u锁
其中LOCK_STATUS=1
和LOCK_OBJECT_ID='YourDatabaseID'
及(
锁定类型=2
或锁定类型=4
或锁定类型=10
或锁定类型=16
)
谢谢您的回复,我会试一试的。这可能是一个愚蠢的后续问题,但我看到LOCK_OBJECT_ID位于数据库级别。我们是否假设,如果正在处理单个度量值组,那么在数据库级别仍然会有一个锁?是的。测试它,但我尝试处理一个度量值组,并得到了一个数据库级锁。