我正在使用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。
答案 0 :(得分:0)
我认为你不应该像你想的那样直接尝试使用PowerShell和MSDTC。相反,我只会使用普通的旧TRANSACTION
语句:BEGIN
COMMIT
和ROLLBACK
......
我认为你真正想要的是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()
将提交或回滚更改。