【问题标题】:sqlps transaction issuesqlps 事务问题
【发布时间】:2015-03-13 07:57:29
【问题描述】:

我编写了一个使用 sqlps 部署 SSAS 表格多维数据集的脚本。部署后,我需要对多维数据集执行几个操作,但如果我尝试访问它,我会收到一条消息,指出多维数据集不存在。但事实上,如果我将操作拆分为两个脚本(部署 -> 退出 sql ps -> 新 sqlps 会话),它确实有效(出于现在无关紧要的原因,我不能这样做)。

似乎 sqlps 会话没有看到它刚刚部署的多维数据集。我想知道是否可以运行刷新命令,或者是否可以在“未提交读取”状态下运行 sqlps。

【问题讨论】:

    标签: sql powershell ssas sqlps


    【解决方案1】:

    您是否使用支持 cmdlet 的 PowerShell Transactions?看起来只有在您的脚本用完后才会提交事务。

    尝试将部署逻辑拆分为两个事务:创建多维数据集和您需要执行的其他操作。对于每个部分,您应该使用它自己的事务,如下所示:

    Start-PSTransaction
    // logic
    Complete-PSTransaction
    

    如果您需要以编程方式访问事务,则应使用 PowerShell 中的 TransactionScope 模拟,即 Cmdlet 的 CurrentPsTransaction 属性,如下所示:

    using(CurrentPsTransaction)
    {
       ... // Perform transactional work here
    }
    
    ... // Perform non-transacted work here
    
    using(CurrentPsTransaction)
    {
       ... // Perform more transactional work here
    }
    

    更新:
    您可以使用声明打开交易吗?

    为事务开发 – Cmdlet 和 Provider 声明 Cmdlet 以与声明对 ShouldProcess 的支持类似的方式声明对事务的支持:

    [Cmdlet(“Get”, “Process”, SupportsTransactions=True)]
    

    提供者通过 ProviderCapabilities 标志声明他们对事务的支持:

    [CmdletProvider(“Registry”, ProviderCapabilities.Transactions)]
    

    有关 Powershell 中的隔离级别的更多信息:

    TransactionScope with IsolationLevel set to Serializable is locking all SQL SELECTs

    【讨论】:

    • 您好,我似乎无法运行 Start-PSTransaction,我收到一条消息“‘Start-PSTransaction’一词未被识别为 cmdlet、函数、脚本文件或可运行的程序。”我只尝试了“Start-Transaction”,它没有失败,但似乎也没有真正开始交易,因为问题仍然存在。艾比的想法?谢谢
    • 更新了答案,但不能确定它是否有帮助。
    • @Diego 也许你应该在你的 PS 脚本中添加一些模块。
    • 我尝试将 [Cmdlet(“Get”, “Process”, SupportsTransactions=True)] 添加到脚本顶部,但它抱怨语法错误
    • @Diego 不能确定如何排除这个问题。您可以提供一些代码进行调查吗?
    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2010-12-18
    • 2011-06-19
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多