2010-06-01 3 views
3

간단한 SQL 문으로 여러 데이터베이스를 업데이트해야합니다. 데이터베이스는 '링크 된 서버'를 사용하여 SQL로 구성되며 SQL 버전은 혼합되어 있습니다 (SQL 2008, SQL 2005 및 SQL 2000). 나는 하나의 데이터베이스에 저장 프로 시저를 작성하려고하지만, 트랜잭션을 사용하여 각 데이터베이스가 일관되게 업데이트되도록하고 싶습니다.하나의 SP에서 데이터베이스 간 트랜잭션

  1. 은 단 하나/시작하는 모든 데이터베이스에서 모든 명령문이 성공을 보장하기 위해 TRANSACTION 작업을 COMMIT 것 :

    가장 정확한은 다음 중 하나입니다

    ?
  2. 데이터베이스의 개별 명령 세트마다 여러 개의 BEGIN TRANSACTIONS가 필요합니까?
  3. 원격 데이터베이스를 업데이트 할 때 트랜잭션이 지원됩니까? 임베디드 트랜잭션을 지원하는 원격 SP를 실행해야합니다.

모든 종류의 데이터베이스 간 참조 무결성에 대해서는 신경 쓰지 않습니다. 가능한 한 단일 저장 프로 시저에서 여러 데이터베이스를 동시에 업데이트하려고합니다.

기타 다른 의견도 환영합니다. 감사!

답변

1

분산 트랜잭션을 사용하여 # 1을 달성 할 수 있어야합니다. DTC가 활성화되어 있어야하며 저장 프로 시저 내에서 ROLLBACK TRANSACTION 및 COMMIT TRANSACTION과 함께 BEGIN DISTRIBUTED TRANSACTION을 사용해야합니다. DTC 다루기

그래서 행운, 개는을 많이되고 있습니다 :)

4

그것은 가능하다. 제어 절차에서 명시적인 BEGIN DISTRIBUTED TRANSACTION을 사용하거나 정상적인 트랜잭션을 시작하고 DTC를 사용하여 연결된 서버를 가로 질러 갈 때 트랜잭션을 분산 된 서버로 올리면 자동으로 발생합니다. MSDN의 Transact-SQL Distributed Transactions을 참조하십시오.

그러나 나는 그것이 미끄러운 경사라는 것을 경고해야합니다. DQ (분산 쿼리)를 그림으로 가져 오면 즉시 실패 횟수와 중단 시간이 크게 늘어납니다. 99.5 %의 가동 시간 (즉, 1 년에 43 시간의 가동 중지 시간)이 있고 쿼리가 5 개의 서버에 도달하면 가용성은 97.5 % (연간 216 시간의 가동 중지 시간)가됩니다. 10 대의 서버를 사용할 경우 95 %의 가동 시간 (428 시간의 가동 중단 시간)이됩니다. OS 패치 배포 관리, 엔진 SP 업그레이드 또는 응용 프로그램 유지 관리 (인덱스 재구성 등을 생각하는 것)와 같은 것들이 조율하고 조정하는 악몽이됩니다.

가는 방법은 DQ 대신 Service Broker과 같은 것을 사용하는 것입니다.

관련 문제