변경 내용 추적 내부가 SQL Server 2008에서 2012로 변경 되었습니까?


9

연결이 끊긴 장치를 중앙 데이터베이스 서버와 동기화하는 데 문제가 발생하면 서버에서 SQL Server 2012로 업그레이드 한 후 문제가 발생합니다. CHANGE_TRACKING_MIN_VALID_VERSION이 (는) 업그레이드 전보다 최소한 1 또는 더 높은 값을 반환하는 것으로 보입니다.

나는 간단한 예제를 설정하는 방법에 대한 예제 를 통해 Arshad Ali의 위대한 산책을 통해 일해 왔습니다 .

SQL Server 2008과 2012 환경 모두에서 Employee 테이블의 행을 삽입, 삭제 및 업데이트하기 위해 # 1부터 # 5까지의 스크립트를 실행했습니다.

2008 년에 다음 명령문은 0을 리턴합니다.

SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))

2012 년에는 1을 반환합니다.

테스트에서 몇 가지 스크립트 (6-8)를 통해 작업하면서 정리 작업을 강제로 수행하기 위해 보존 기간을 1 분으로 설정했습니다. 나는 하루 동안 떠났고 분명히 밤새 달렸다.

2008 인스턴스에서 CHANGE_TRACKING_CURRENT_VERSION과 CHANGE_TRACKING_MIN_VALID_VERSION은 (11)과 같습니다. 2012 년 인스턴스에서 CHANGE_TRACKING_MIN_VALID_VERSION은 CHANGE_TRACKING_CURRENT_VERSION (11)보다 하나 더 높습니다 (12). 데이터베이스가 오랫동안 유휴 상태 인 경우 동기화 프로세스에 영향을 줄 수 있습니다. 또한 동기화와 반대로 재 초기화가 필요한지 여부를 확인하기 위해 다음 테스트를 수행 할 때 프로세스가 루프에 걸릴 수 있음을 발견했습니다.

IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor 
       RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...

다른 사람이 이런 행동 변화를 경험 했습니까? 누구든지 설명이 있습니까?


2
이 문제에 대한 Microsoft Connect 항목 connect.microsoft.com/SQLServer/feedback/details/770014/…가 있습니다. 기본적으로 Microsoft는 문제가 데이터베이스의 손상과 관련이있을 것으로 생각합니다. 새로 작성된 데이터베이스에서이 상황을 재현 할 수 있습니까?
Max Vernon

1
Max, Connect 기사를 검토했습니다. 불행하게도, 원래의 포스터는 토론을 포기한 것으로 보이며 MS는이 문제를 종결시켰다. 문제의 재현을 설정할 때 2008R2 및 2012 인스턴스 모두에서 새로 만든 데이터베이스로 테스트를 시작했습니다. 두 데이터베이스 모두 다른 모든 측면에서 정상적으로 작동하는 것으로 보입니다.
Glenn Estrada

3
문제에 대한 재현 단계를 통해 문제를 해결할 수 있도록 Connect에보고하십시오.
Jon Seigel

업그레이드 후 DB의 호환성 수준을 변경 했습니까? 변경 내용 추적을 사용하지 않지만 업그레이드 후 버전 불일치를 생각합니다.
기 illa R.

답변:


3

변경 사항을 추적하기 위해 min_valid_version을 사용하지 않습니다. 클라이언트가 변경 사항을 사용하기 전에 메타 데이터를 정리 한 경우 클라이언트를 다시 초기화해야하는지 확인하는 데만 사용됩니다.

CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL)

CHANGETABLE함수를 사용할 때 지정된 테이블에서 변경 내용 추적 정보를 얻는 데 사용할 수있는 최소 버전을 가져옵니다 .

Min_valid_version은 정리 버전에 따라 변경되며 사용자 테이블의 변경 내용에 의존하지 않습니다. 정리 스레드가 실행될 때마다 데이터 변경에 관계없이 min_valid_version이 업데이트 될 수 있습니다.

2012 년 이전에는 min_valid_version이 정리 버전과 동일하게 표시되었습니다. 실제로 해당 버전의 메타 데이터가 이미 정리되었으므로 정리 버전보다 하나 이상이어야합니다. 2012 년에는 올바른 min_valid_version을 업데이트하기 위해 변경되었습니다.

하나는 min_valid_version을 사용하여 변경 사항을 추적해서는 안되며 모든 동기화 후에 last_sync_version을 저장 CHANGETABLE하고 마지막 동기화 버전 이후의 변경 사항을 열거하려면을 호출해야 합니다.

기본적으로 정리 버전으로 유효한 최소 버전 변경 사항이며 사용자 테이블의 변경 사항에 의존하지 않습니다. 정리 스레드가 실행될 때마다 데이터 변경에 관계없이 유효한 버전을 업데이트하는 업데이트가있을 수 있습니다.

해결- 'min_valid_version'대신 'current_version'을 사용하도록 절차 변경

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.