我可以在PowerShell中创建MSDTC事务吗?

时间:2014-07-23 15:08:49

标签: sql-server powershell

我正在使用Powershell 4来执行一些部署任务,包括将大量sql文件运行到数据库服务器中。

http://technet.microsoft.com/en-us/library/dn464259.aspx

我找到了MSDTC的上述cmdlet,我可以看到一个用于创建事务,回滚和提交的cmdlet。但是,我无法找到它们,我认为它是因为我们没有运行Windows 8和/或Server 2012 R2。

有没有办法可以使用MSDTC创建一个事务范围,这样我可以执行所有脚本,知道如果其中任何一个失败,它们都将回滚?

我们正在运行Windows 7& Server 2008 R2。

2 个答案:

答案 0 :(得分:0)

我认为你不应该像你想的那样直接尝试使用PowerShell和MSDTC。相反,我只会使用普通的旧TRANSACTION语句:BEGIN COMMITROLLBACK ......

我认为你真正想要的是SQL语句BEGIN DISTRIBUTED TRANSACTION

请参阅:MSDN: BEGIN DISTRIBUTED TRANSACTION

这将使用MSDTC在同一会话中执行多个脚本,并能够提交或回滚事务。

答案 1 :(得分:0)

如果启用了网络DTC访问,您可以使用简单的try/catch并调用.NET的TransactionScope对象。

try {
    $scope = New-Object -TypeName System.Transactions.TransactionScope

    # do stuff
} catch {
    $_.exception.message
} finally {
    $scope.Dispose()
}

在TransactionScope上调用Dispose()将提交或回滚更改。