DetailPage-MSS-KB

기술 자료

기술 자료: 953481 - 마지막 검토: 2008년 7월 11일 금요일 - 수정: 1.0

사용 가능한 핫픽스 다운로드
핫픽스 보기 및 다운로드 요청하기
 
 
# 버그: 50002854 SQL 핫픽스
Microsoft은 다운로드 가능한 파일로 Microsoft SQL Server 2005 수정 프로그램을 배포합니다. 수정 프로그램은 계속 누적되는 각 새 릴리스에 모든 핫픽스를 포함하며 수정 프로그램 릴리스의 이전 SQL Server 2005에 포함된 모든 보안 수정.

이 페이지에서

현상

다음 시나리오를 생각해 볼 수 있습니다. SQL Server 2005 병합 게시를 구성합니다. 병합 게시에 ID 열이 포함된 테이블을 추가합니다. 그런 다음 게시자의 테이블에 데이터를 삽입할. 구독자와 게시자 간에 데이터를 동기화하는 게시자에서 추가 데이터를 삽입할 확인한 후. 이 시나리오에서는 게시자에 다음 오류 메시지가 나타납니다.
메시지 548, 수준 16, 상태 2, 1
삽입이 실패했습니다. ID를 충돌했던 범위 CHECK 제약 조건이 데이터베이스에서 ' DatabaseName ', 복제된 테이블에 ' Schema. TableName ', ' ColumnName ' 열. ID 열을 복제에 의해 관리되는 자동으로 해당 범위를 같이 업데이트할:, 게시자에 대한 sp_adjustpublisheridentityrange 실행할;, 구독자의 배포 에이전트 또는 병합 에이전트가 실행할.
하면 해당 sp_adjustpublisheridentityrange 실행할 저장 프로시저를 게시자에서 오류 메시지에서 언급한 것처럼, 이 문제를 해결하려면 없습니다.

여러 병합 에이전트가 동일한 병합 게시에 대해 동시에 데이터를 동기화할 때 이 문제가 발생합니다. 병합 게시에 여러 구독자가 있을 경우 이 문제가 악화됩니다 수 있습니다.

원인

이 문제는 게시자에 테이블의 현재 ID 값을 ID 범위 CHECK 제약 조건을 ID 범위 내에 않기 때문에 발생합니다. 이 문제는 여러 병합 에이전트가 게시자에 다음 ID 범위를 만들어 동시에 ID 범위를 높일 때 발생합니다.

해결 방법

이 문제점에 대한 픽스는 누적 업데이트를 8 먼저 릴리스되었습니다. SQL Server 2005 서비스 팩 2에 대한 이 누적 업데이트 패키지를 구하는 방법에 대한 자세한 문서를 보려면 Microsoft 기술 자료에 있는 다음 문서 번호를 클릭하십시오.
951217  (http://support.microsoft.com/kb/951217/LN/ ) SQL Server 2005 서비스 팩 2용 누적 업데이트 패키지 8
참고 빌드가 누적되는 형태이므로 새로운 각 수정 릴리스의 모든 핫픽스를 포함하며 수정 프로그램 릴리스의 이전 SQL Server 2005에 포함된 모든 보안 수정. 이 핫픽스가 포함된 최신 수정 릴리스를 적용하는 고려하는 것이 좋습니다. 자세한, Microsoft 기술 자료에 있는 문서를 보려면 다음 문서 번호를 클릭하십시오.
937137  (http://support.microsoft.com/kb/937137/LN/ ) SQL Server 2005 SQL Server 2005 서비스 팩 2가 릴리스된 후에 릴리스된 빌드
Microsoft SQL Server 2005 핫픽스가 특정 SQL Server 서비스 팩에 대한 만들어집니다. SQL Server 2005 서비스 팩 2 설치의 SQL Server 2005 서비스 팩 2 핫픽스를 적용해야 합니다. 기본적으로 SQL Server 서비스 팩이 나와 있는 핫픽스는 다음 SQL Server 서비스 팩이 포함되어 있습니다.

해결 과정

이 문제를 해결하려면 여러 동시 병합 동기화 방지해야 합니다. 이렇게 하려면 max_concurrent_merge 속성을 설정할 병합 게시에 다음 문을 실행하여:
sp_changemergepublication '<PublicationName>', 'max_concurrent_merge', 1
참고 이 해결 방법으로 후 성능이 게시에 대해 여러 구독자가 있을 경우 저하될 수 있습니다. 이 문제는 하나만 구독자 한 번에 데이터를 동기화할 수 있기 때문에 발생합니다.

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열된 Microsoft 제품의 문제가 이 문제를 확인했습니다.

추가 정보

이 문제가 발생하는지 확인하는 방법

이 문제가 발생하는지 확인하려면 다음 이 단계를 수행하십시오.
  1. 현재 ID 값을 ID 범위 CHECK 제약 조건 먼저 ID 범위의 하한이 작은 있는지 확인하십시오.

    현재 ID 값을 가져오려면 다음 문을 실행할:
    SELECT IDENT_CURRENT ('<TableName>')
    ID 범위 CHECK 제약 조건 ID 범위를 가져오려면 실행하거나 다음 문 중:
    문 1
    sp_helpconstraint '<TableName>'
    문 2
    select * from MSmerge_identity_range
    where is_pub_range <>1
    AND artid IN 
     (select artid from sysmergearticles where name='<TableName>')
    AND subid in 
     (select subid from sysmergesubscriptions  MS
    join sysmergepublications MP 
    on MS.subscriber_server=MP.publisher
    AND MS.db_name = MP.publisher_db
    WHERE name='<PublicationName>'
    )
    
  2. 같은 게시에 대한 별도의 병합 에이전트가 세션에서 sp_MSsetup_publisher_idrange 저장 프로시저의 실행 인터리브 시작되었는지 여부를 확인하려면 SQL Server 프로필러 추적을 사용하십시오.

    그러나 sp_MSsetup_publisher_idrange 저장 프로시저의 인터리빙된 실행을 항상 나타내지 않습니다 이 문제가 발생한. 병합 동기화 중 원래 모두 첫 번째 오류 메시지가 생성될 때 SQL Server 프로파일러는 실행한 때문입니다. 그러나 sp_MSsetup_publisher_idrange 저장 프로시저의 실행 인터리브 이 문제가 발생할 가능성을 높일 실행합니다.
  3. 548"오류 메시지가 나타날 때 발생하는 겹치는 병합 동기화 찾을 수 있습니다. 이렇게 하려면 배포 데이터베이스에 병합 기록을 검토할 수 있습니다. 이렇게 하려면 다음 문을 실행할: #sessiontimes dbo.MSmerge_history A.agent_id 있는 조인 dbo.msmerge_agents B에서 에서 로 EndTime 같이
    Use distribution
    GO
    select session_id, agent_id, B.publication, min(time) as StartTime, max(time) as EndTime
    into #sessiontimes
    from dbo.MSmerge_history A
    join dbo.msmerge_agents B
    on A.agent_id = B.id
    group by session_id, agent_id, publication
    order by 3 desc
    GO
    -- The left side result is the original session. The right side result is the overlapping session.
    select A.*, B.* 
    from #sessiontimes A
    Join #sessiontimes B
    On B.StartTime >= A.StartTime
    AND B.StartTime <= A.EndTime
    AND A.session_id <> B.session_id
    And A.publication=B.publication
    Order By A.StartTime asc
    GO
    drop table #sessiontimes
    

기존 수정하는 방법이 손상된 문제가 테이블의 ID 범위

누적 업데이트를 설치한 후 또는 해결 방법 절에 설명되어 있는 방법을 사용한 후 테이블의 기존 손상된 ID 범위가 수정되지 않습니다. 계속 받게 548"오류 메시지가 테이블로 데이터 삽입 및 구독자의 데이터를 동기화할 경우. 따라서, 테이블이 손상된 ID 범위를 수동으로 수정해야 합니다. 이렇게 하려면 다음과 같이 하십시오.

참고 이 단계를 수동으로 게시자에서 ID 값을 올바르게 reseed 테이블의 현재 ID 시드 값을 재정의 포함됩니다. 손상된 상태의 현재 ID를 값이 병합 복제 ID 범위 확인 제약 조건 첫 번째 ID 범위를 보다 작은 경우 단계를 수동으로 병합 복제 ID 범위 CHECK 제약 조건을 정의한 ID 범위를 내에 속하는 ID 값을 올립니다. 이 단계의 ID를 오름차순 방식으로 구성된 ID 증분은 1 값으로 증가시키려면 구성되었는지 가정합니다.
  1. ID를 증분 값은 1 확인하고 ID를 방식으로 오름차순으로 진행됩니다. 게시자에 다음 문을 실행하여 ID 증분 값을 얻을 수 있습니다:
    SELECT IDENT_INCR( '<TableName>')
  2. 현재 ID 값을 문제가 ID 열을 찾으려면 게시자에 다음 문을 실행할:
    DBCC CHECKIDENT ('<TableName>')
    결과를 받은 후 나중 단계에서 비교에 현재 ID 값 을 값을 기록합니다. 알 수 현재 열 값 을 valye 큰 또는 ID 값이 현재 값보다 작을 수 있습니다.

    현재 열 값 을 값이 ID 값이 현재 값보다 큰 경우, 열 값이 있습니다 토폴로지의 다른 복제 시 발생한 있고 게시자의 복제 성공적으로 병합된. 현재 열 값 을 값이 ID 값이 현재 값보다 작은 경우, 값이 있습니다 이전에 삽입한 게시자에 이전 시간에 SET IDENTITY_INSERT 사용 사용하여 병합 복제 구성 전에 문을.
  3. 게시자의 ID 범위 현재 ID 범위를 문제가 테이블에 대한 제약 조건을 확인할 확인하려면 다음 문을 실행할:
    Use <PublishedDatabaseName>
    GO
    sp_helpconstraint '<TableName>'
    GO
    
    결과를 받은 후 constraint_name 열의 값이 "repl_identity_range_ GUID 위치 레코드 constraint_keys 열의 값을 적어 둡니다. GUID 값을 sysmergearticles 시스템 테이블 아티클에 대한 artid 열의 값에 해당합니다. GUID를 구하려면 다음 문을 실행할:
    select artid from sysmergearticles where name = '<TableName>'
    ID를 범위 CHECK 제약 조건을 두 별도의 범위에 걸쳐 있습니다. 범위 두 집합 인접해야 필요가 없습니다. 예를 들어, constraint_keys 열의 값을 다음과 같이 수 있습니다.
    ([ColumnName] > (1001)/[ColumnName]<=(2001)
    또는 [ColumnName] > (9001입니다)/[ColumnName]<=(10001))
    참고 이 문서에서는 이 예제에서는 나머지 단계를 수행하여 코드를 표시하는 데 사용합니다.

    이 예제에서는 각 범위를 1,000 값을 걸쳐 있습니다. 1,000 기본 범위 크기가.입니다. 그러나 다음 방법 중 하나를 사용하여 ID 범위 크기를 변경할 수 있습니다.
    • @ pub_identity_range 지정한 경우 sp_addmergearticle 실행할 때 매개 변수 저장 프로시저.
    • 문서 속성 대화 상자에서 아티클에 대해 구독자의 범위 크기 속성을 변경하십시오.
  4. "현상" 절에 설명되어 있는 문제가 발생하면 2단계에서 적어 둔 현재 ID 값을 3단계에서 적어 둔 ID 범위 CHECK 제약 조건 먼저 ID 범위의 하한이 보다 작을 수 합니다.

    2단계에서 현재 ID 값을 두 번째 ID 범위 상한을 크면 ID 범위를 CHECK 제약 조건이, 오류 메시지에서 권장되는 방법을 사용하여 문제를 해결할 수 있습니다. 따라서 게시자를 sp_adjustpublisheridentityrange 저장 프로시저를 실행해야 합니다.

    sp_adjustpublisheridentityrange 저장 절차에 대한 자세한 내용은 다음 MSDN Microsoft 개발자 네트워크 웹 사이트를:
    http://msdn.microsoft.com/en-us/library/ms181527.aspx (http://msdn.microsoft.com/en-us/library/ms181527.aspx)
  5. 모든 행 ID 범위 CHECK 제약 조건 현재 ID 범위를 있는지 확인하는 다음 문을 실행할:
    SELECT COUNT(*) FROM TableName WHERE 
    ([ColumnName]>(1001) AND [ColumnName]<=(2001) 
    OR [ColumnName]>(9001) AND [ColumnName]<=(10001))
    
    메모
    • 반환하는 0, 현재 ID 범위를 행이 있습니다. 이 경우 6단계로 이동하십시오.
    • 문을 0보다 큰 값을 반환하면 현재 ID 범위 최대 ID 값을 얻기 위해 다음 문을 실행할:
      SELECT MAX(ColumnName) as MaxValue FROM TableName WHERE 
      ([ColumnName]>(1001) AND [ColumnName]<=(2001) OR 
      [ColumnName]>(9001) AND [ColumnName]<=(10001))
      
      반환된 값을 적어 두고 다음 7단계로 이동합니다.
  6. 유효한 범위 내에 속하는 문제가 테이블의 현재 ID 수동으로 reseed.

    현재 ID 범위 + 1 가장 낮은 값을 현재 ID reseed. 예를 들어, 현재 ID 범위를 가장 낮은 값이 1001, 경우 첫 번째 가능한 범위에 있는 값은 1002 ID 범위 확인 제약 조건 범위의 낮은 끝 더 큰 사용하므로 기호 (>). 이렇게 하려면, 게시자에 다음 문을 실행합니다 을 8단계로 이동하십시오.
    DBCC CHECKIDENT ('TableName', RESEED, 1002)
  7. 유효한 범위 내에 속하는 문제가 테이블의 현재 ID 수동으로 reseed.

    ID 증분은 1 가정하십시오. 5단계에서 기록해 둔 값을 현재 ID reseed 추가하고 1. 예를 들어, 5단계에서 기록해 둔 값이 1507 경우 현재 ID를 1508 reseed. 이렇게 하려면 게시자에 다음 문을 실행합니다.:
    DBCC CHECKIDENT ('TableName', RESEED, 1508)
  8. 548 발생하는 오류 없이 게시자 데이터베이스에 있는 테이블에 새 행을 삽입할 수 있는지 여부를 확인하는 테스트를 수행하십시오.
어떤 파일은 변경되지에 대한 자세한 내용과 이 Microsoft 기술 자료 문서에 설명되어 있는 핫픽스가 포함된 누적 업데이트 패키지를 적용하려면 전제 조건에 대한 자세한 내용은 Microsoft 기술 자료에 있는 문서를 보려면 다음 문서 번호를 자료의.
951217  (http://support.microsoft.com/kb/951217/LN/ ) SQL Server 2005 서비스 팩 2용 누적 업데이트 패키지 8

참조

SQL Server 서비스 팩 2 후에 사용할 수 있는 빌드 목록에 대한 자세한 문서를 보려면 Microsoft 기술 자료에 있는 다음 문서 번호를 클릭하십시오.
937137  (http://support.microsoft.com/kb/937137/LN/ ) SQL Server 2005 SQL Server 2005 서비스 팩 2가 릴리스된 후에 릴리스된 빌드
SQL Server에 [NULL]에 대한 증분 서비스 모델에 대한 자세한 문서를 보려면 Microsoft 기술 자료에 있는 다음 문서 번호를 클릭하십시오.
935897  (http://support.microsoft.com/kb/935897/LN/ ) 보고된 문제에 대한 핫픽스를 제공하는 SQL Server 팀으로부터 증분 서비스 모델을 구할 수
SQL Server 2005 서비스 팩 2를 구하는 방법에 대한 자세한 문서를 보려면 Microsoft 기술 자료에 있는 다음 문서 번호를 클릭하십시오.
913089  (http://support.microsoft.com/kb/913089/LN/ ) SQL Server 2005 최신 서비스 팩을 구하는 방법
새로운 기능과 SQL Server 2005 서비스 팩 2의 향상된에 대한 자세한 내용은 다음 Microsoft 웹 사이트를:
http://go.microsoft.com/fwlink/?LinkId=71711 (http://go.microsoft.com/fwlink/?LinkId=71711)
SQL Server 명명 스키마에 대한 자세한 내용은 업데이트, Microsoft 기술 자료에 있는 문서를 보려면 다음 문서 번호를 클릭합니다.:
822499  (http://support.microsoft.com/kb/822499/LN/ ) Microsoft SQL Server 소프트웨어 업데이트 패키지의 새로운 명명 스키마
소프트웨어 업데이트 용어에 대한 자세한 문서를 보려면 Microsoft 기술 자료에 있는 다음 문서 번호를 클릭하십시오.
824684  (http://support.microsoft.com/kb/824684/ ) Microsoft 소프트웨어 업데이트를 설명하는 데 사용되는 표준 용어에 대한 설명

본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Workgroup Edition
키워드: 
kbmt kbhotfixrollup kbfix kbpubtypekc kbqfe kbexpertiseadvanced kbhotfixserver kbautohotfix kbsql2005repl KB953481 KbMtko
기계 번역된 문서기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
공유
추가 지원 옵션
Microsoft Community 지원 포럼
직접 문의하기
Microsoft Certified Partner 찾기
Microsoft Store