2012-07-31 2 views
1

동일한 기간 동안 두 개의 서로 다른 SQL Server 데이터베이스에서 일련의 개체를 가져와야하는 경우가 있습니다. DB1은 Car 테이블을 가지고 있으며, DB2는 Person 테이블이있는 경우 날짜보다 두 데이터베이스의 상태를 더 잘 비교할 수있는 방법이 있습니까?

그래서, 나는 시간 t의 한 지점까지의 모든 CarsPersons을 싶어.

그러나 나는 날짜를 다루지 않기를 바란다. (나는 두 번째 문제와 그런 종류의 도약을 겪고 싶지 않다.) 다행스럽게 두 데이터베이스 모두 RowVersion 열을 사용한다. 이상적으로 나는이 같은 RowVersion 동시성 토큰 (내 t) 시간/특정 글로벌 상태를 나타내는 다음과 같은 레코드를 비교할 수있는 같은 것을 사용하고 싶습니다.

불행히도 RowVersion 열은 데이터베이스와 관련이 있으므로 다른 데이터베이스간에 비교할 수 없습니다.

더 좋은 해결책이 있습니까? 나는 날짜를 사용하기를 원하지 않는 것에 과민 반응합니까? 당신은 당신이 다루고있는 특정 기간이 있습니까

제안

+1

과민 반응을하는 것 같습니다. 날짜를 다루는 것이 훨씬 어려울 것입니다. –

+0

@MuhammadGelbana - 나는 DST에 의해 이전에 물려 받았고, 시스템 간의 datetime 변환의 차이 (외부 당사자와 관련된), 시스템 클럭 간의 불일치 및 기타 문제. –

+0

나는 무하마드와 함께있다. 나는 SQL 서버로 일한 적이 없으므로 여기서 제한적이다. 분산 데이터베이스를 다루는 일반적인 교훈은 모든 시스템의 모든 날짜를 공통 형식 (GMT)으로 저장하는 것이 었습니다. 그것은 모든 것을 비교할 수있게 해줍니다. 디스플레이 와이즈 (현지 시간)는 클라이언트 표현 문제가됩니다. – Glenn

답변

1

여러 개의 개별 시스템에 대해 이야기하고 있으므로 옵션이 불행히도 제한적입니다. 모든 datetimes를 그리니치 표준시로 저장함으로써 올바른 위치에서 시작했습니다.

그 외에도 여기서는 datetime 만 실제로 사용할 수있는 데이터 유형입니다. 그렇습니다. 좋은 시스템 공통 시간 동기화를 가정 할 때 여러 시스템 사이에서 1 초도 안될 것입니다. 그러나 레코드를 업데이트 할 때 간단한 네트워크 대기 시간은 시계가 정확하게 동기화 된 경우에도 시간 차이를 유발합니다.

RowVersion는 귀하가 언급 한 이유 때문에 도움이 될 수 없습니다.

유일하게 다른 방법은 하나의 데이터베이스 또는 다른 데이터베이스에 'sync'테이블을 갖는 것입니다. 논리적으로는 (물리적으로는 아니지만) 어느 데이터베이스의 레코드와도 관련이 있으며 공통 datetime 또는 rowversion이 있습니다. 용도. 그것은 당신의 질의의 복잡성을 조금 증가시킬 것이지만, 당신은 이미 교차 데이터베이스 질의를하는 것처럼 보입니다.

+0

감사합니다. 분명히 뭔가 간과하지 않았 음을 확인했습니다.현재 우리는 두 데이터베이스의 연결된 RowVersion을 제안합니다. 이는 제안 된 '동기화'테이블과 다소 비슷합니다. –

+0

@MattMitchell 값을 연결하면 예상대로 작동하는지 모르겠습니다. –

+0

왜 그럴까요? 클라이언트가 연결 (분리) 토큰을 리턴하므로 데이터가 마지막으로 발행 된 시점에서 데이터베이스의 공유 상태를 식별 할 수 있습니다. –

0

:-) 감사? 그렇다면 공통된 "TimePeriod"테이블을 날짜 처리 대신 각 레코드에 연결할 수 있습니까?

+0

시간보다 상태가 더 중요합니다. (DB2 이전에 'DB1'에서 모든 레코드를 가져와야하고 최근 DB1 레코드 이후에 만들어진 'DB2'레코드를 가져올 수 없습니다.) 문제 또한이 데이터베이스는 별도의 데이터베이스이므로 각 데이터베이스에 TimePeriod 테이블이 필요합니다. –

관련 문제