2014-07-23 1 views
0

PowerShell 4를 사용하여 데이터베이스 서버에 여러 개의 SQL 파일을 실행하는 등 일부 배포 작업을 수행하고 있습니다.PowerShell에서 MSDTC 트랜잭션을 만들 수 있습니까?

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

나는 MSDTC에 대해 위의 cmdlet을 발견하고 난 트랜잭션, 롤백을 만드는 일을보고 커밋 할 수 있습니다. 그러나 나는 찾을 수 없으며 Windows 8 및/또는 Server 2012 R2를 실행하고 있지 않기 때문에 가정합니다.

MSDTC를 사용하여 트랜잭션 범위를 만들 수있는 방법이 있습니까? 스크립트가 모두 실패하면 모두 롤백된다는 것을 알고 모든 스크립트를 실행할 수 있습니까?

우리는 Windows 7을 실행 중입니다. & Server 2008 R2.

+0

나는 다른 서버를 가리키는 두 개 이상의 연결 문자열이있는 명령을 사용할 때 트랜잭션 범위에서 MSDTC가 자동으로 사용됩니다. MSDTC가 구성되어 있지 않으면 서버에서 트랜잭션 범위를 사용할 때 오류가 발생합니다. –

+0

@lrb 그건 내가하고 싶은 일이다. 나는 이것을 Powershell에서 한 번도 해보지 않았지만, 여러 번 해봤 다. MSDTC는 여러 WCF 서비스에서 분산 트랜잭션을 사용하므로 내 개발 상자와 서버에 구성됩니다. Powershell의 컨텍스트 내에서이 작업을 수행하는 방법을 알지 못합니다. – Penfold

답변

0

생각하고있는대로 PowerShell을 직접 MSDTC와 함께 사용해보아야한다고 생각하지 않습니다. 대신 난 그냥 평범한 구식 SQL TRANSACTION 문을 사용합니다 : BEGINCOMMITROLLBACK을 ...

나는 당신이 정말 찾고있는 것은 SQL 문이라고 생각 BEGIN DISTRIBUTED TRANSACTION

참조 : MSDN: BEGIN DISTRIBUTED TRANSACTION

이 MSDTC를 사용합니다 동일한 세션에서 여러 개의 스크립트를 실행하고 트랜잭션을 커밋하거나 롤백 할 수 있습니다.

0

네트워크 DTC 액세스가 사용 가능한 경우 간단한 try/catch을 사용하고 .NET의 TransactionScope 개체를 호출 할 수 있습니다. 커밋 또는 변경을 롤백 것 중 하나는 TransactionScope에 Dispose()를 호출

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

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

.

관련 문제