2013-09-04 2 views
4

저장 점이있는 트랜잭션 내부에서 연결된 서버에있는 테이블을 사용하여 조인해야합니다. 나는 그것을 할 때, 나는 오류 메시지 :연결된 서버에서 SAVE TRANSACTION 사용

“Cannot use SAVE TRANSACTION within a distributed transaction” 

원격 테이블 데이터가 거의 변경되지 않습니다. 거의 고쳐졌습니다. 트랜잭션에서이 테이블을 제외하도록 SqlServer에 지시 할 수 있습니까? 나는 (NOLOCK) 힌트를 시도했지만 연결된 서버의 테이블에 대해이 힌트를 사용할 수 없습니다.

해결 방법에 대해 아는 사람이 있습니까? 나는 OLE SqlServer 2000을 사용하고 있습니다.

답변

0

당신이 할 수있는 한 가지는 전에 원격 테이블 의 로컬 복사본을 만드는 것입니다. 오버 헤드가 많이 들릴 수도 있지만 리모트 조인은 종종 성능 문제가되며 SOP 수정은 로컬 복사본을 만드는 것입니다.

+0

그냥 웹 사이트 http://www.movingsql.com/이 (가) 작동하지 않습니다. –

1

link에 따르면, 분산 트랜잭션 세이브 포인트를 사용할 수있는 기능은 분산 트랜잭션 내부 세이브 포인트가 사용 중일 때 마이크로 소프트 SQL 서버 6.5의 애플리케이션 마이그레이션을 허용하려면 SQL 7

에 떨어졌다 , Microsoft SQL Server 2000 서비스 팩 1에는 분산 트랜잭션 내에서 저장 점을 허용하는 추적 플래그가 도입되었습니다. DBCC TRACEON 명령을 사용하여 SQL Server가 시작될 때 또는 세션 (즉, BEGIN DISTRIBUTED TRANSACTION 문을 사용하여 분산 트랜잭션을 사용하기 전에) 내에 추적 플래그가 8599 및 으로 설정 될 수 있습니다. 추적 플래그 8599가 ON으로 설정된 경우 SQL Server에서는 에 분산 트랜잭션 내에서 저장 점을 사용할 수 있습니다.

그래서 불행하게도, 당신은 경계 ACID 트랜잭션을 드롭하거나 SAVEPOINTs를 사용하지 않도록 원격 서버에 SPROC을 변경해야 할 수도 있습니다 중 하나. SQL 서버 2008이에 대한 remote proc trans Option을 가지고 있지만 (나는 당신이 그것을 SQL 서버 2000를 태그 한 것을 알 수 있지만) 보조 노트

는 점을 확인합니다.

0

분산 된 테이블이 너무 크지 않으면이 테이블을 임시 테이블에 복사합니다. 가능한 경우 행 수를 최소로 줄이려면 필터링을 포함 시키십시오. 그런 다음 정상적으로 진행할 수 있습니다. 데이터 변경이 거의없는 이유는 영구 테이블에 데이터를 복사하고 트랜잭션을 실행할 때마다 네트워크를 통해 많은 데이터를 보내지 못하도록 변경된 사항이 있는지 확인하는 것입니다. 최근 변경 사항을 처리 할 수 ​​있습니다.

0

UI 수준에서 트랜잭션을 처리하려는 경우 Visual Studio 2008/.net fx 3.5 또는 + 프레임 워크가 있으면 TransactionScope 클래스로 논리를 래핑 할 수 있습니다. 어떤 프론트 엔드가 없다면 SQL Server에서만 친절하게 대답을 무시합니다 ...

관련 문제