Adamsync에서 OBJ_CLASS_VIOLATION 오류 문제 해결

이 문서에서는 Windows Server에서 Adamsync 도구를 사용할 때 발생하는 OBJ_CLASS_VIOLATION 오류를 해결하는 방법을 설명합니다.

적용 대상: Windows Server 2012 R2
원본 KB 번호: 923835

요약

이 오류는 Active Directory 디렉터리 서비스와 ADAM instance 간의 클래스 정의 차이로 인해 발생합니다. 이 문제를 해결하려면 다음 섹션에 설명된 단계를 수행합니다.

  • 개체의 특성 및 클래스 확인
  • 특성이 TOP 클래스에 속하는 경우 문제를 resolve 단계
  • 특성이 TOP 클래스에 속하지 않을 때 문제를 resolve 단계

증상

ADAM(Active Directory 애플리케이션 모드) 동기화기(Adamsync.exe) 도구를 사용하여 Active Directory 개체를 Windows Server의 ADAM instance 동기화하려고 합니다. 그러나 다음과 유사한 오류 메시지는 Adamsync 로그 파일에 기록됩니다.

처리 항목: 페이지 X, 프레임 X, 항목 X, 개수 X, USN X 처리 원본 항목
<guid=f9023a23e3a06d408f07a0d51c301f38> scope 항목 처리
f9023a23e3a06d408f07a0d51c301f38. 대상 개체 추가
CN= TestGroup,OU= Accounts,dc= domain, dc= com. 특성 추가: sourceobjectguid, objectClass, instanceType, displayName, info, adminDescription, displayNamePrintable, userAccountControl, codePage, countryCode, logonHours, primaryGroupID, comment, accountExpires, sAMAccountName, desktopProfile, legacyExchangeDN, userPrincipalName

Ldap 오류가 발생했습니다. ldap_add_sW: 개체 클래스 위반입니다. 확장 정보: 0000207D: UpdErr: DSID-0315119D, 문제 6002(OBJ_CLASS_VIOLATION), 데이터 -2054643804

원인

이 문제는 Active Directory와 ADAM 간의 클래스 정의 차이로 인해 발생합니다. 이 차이는 해당 클래스에 대해 잘못된 특성을 포함하도록 개체를 수정하려고 할 때 나타납니다. 예를 들어 특성은 ADAM 스키마에 전혀 정의되지 않았거나 특성이 정의되어 있지만 특성은 특정 클래스의 필수 또는 선택적 특성 목록에 없습니다. 일반적으로 두 번째 상황은 이 문제의 가장 빈번한 원인입니다.

동기화할 개체에 대한 클래스 정의에는 ADAM에서 사용할 수 없는 Active Directory의 하나 이상의 특성이 포함되어 있습니다. "증상" 섹션에 언급된 오류 메시지의 "특성 추가" 섹션에는 추가하려는 특성이 표시됩니다. 이러한 특성은 동기화 중인 개체의 클래스에 대한 선택적 또는 필수 특성 목록에 정의됩니다.

예를 들어 "증상" 섹션에 언급된 오류 메시지에서 참조 개체는 CN=TestGroup입니다. Active Directory에서 CN=TestGroup 개체를 보고 이 클래스 및 모든 부모 클래스에 대한 특성 목록을 검사 경우 이 목록의 하나 이상의 특성이 ADAM에서 이 클래스에 대해 사용하도록 설정된 필수 또는 선택적 특성 목록에 없는 것을 볼 수 있습니다.

참고

여기에는 모든 부모 클래스의 특성 목록이 포함됩니다.

해결 방법

이 문제를 resolve 다음 단계를 수행합니다.

개체의 특성 및 클래스 확인

  1. 실패한 개체에 추가되는 특성 목록을 확인합니다. 동기화 로그에서 오류 메시지를 확인하여 실패한 개체를 확인할 수 있습니다. 실패한 개체는 항상 오류 메시지 바로 앞에 동기화 로그의 끝에 표시되는 마지막 개체입니다. 예를 들어 CN=TestGroup 개체가 "증상" 섹션에 언급된 오류 메시지에서 실패했습니다.
  2. DisplayNamePrintable, Flags 또는 ExtensionName 특성이 오류 메시지에 포함되어 있는지 여부를 확인합니다. 이러한 특성 중 하나가 오류 메시지에 포함된 경우 "특성이 TOP 클래스에 속할 때 문제를 resolve 단계" 섹션을 참조하세요. 오류 메시지에 특성이 포함되지 않은 경우 "특성이 TOP 클래스에 속하지 않을 때 문제를 resolve 단계" 섹션을 참조하세요.

특성이 TOP 클래스에 속하는 경우 문제를 resolve 단계

Active Directory 스키마의 TOP 클래스에 DisplayNamePrintable, Flags 또는 ExtensionName 특성이 포함되어 있습니다. 그러나 이러한 특성은 ADAM의 TOP 클래스에 포함되지 않습니다. 그러나 ADAM에서는 TOP 클래스를 변경할 수 없습니다. 따라서 다음 방법 중 하나를 사용하여 문제를 resolve.

  • XML 구성 파일의 제외> 섹션을 <사용하여 이러한 특성을 제외합니다.
  • MMC 스키마를 사용하여 ADAM 스키마의 관련 클래스에 대한 선택적 특성 목록에 이러한 특성을 수동으로 추가합니다. 예를 들어 "증상" 섹션에 언급된 오류 메시지에서 실패한 개체는 Group 클래스입니다. 따라서 ADAM의 Group 클래스에 대한 선택적 특성 목록에 이러한 특성을 추가해야 합니다.

특성이 TOP 클래스에 속하지 않을 때 문제를 resolve 단계

  1. ADSchemaAnalyzer의 도구\옵션 메뉴에서 LDIF 생성 탭에서 새 요소와 현재 요소에 대한 참조로 업데이트를 클릭합니다.

  2. 파일 메뉴를 사용하여 Active Directory를 대상 스키마로 로드하고 ADAM을 기본 스키마로 로드합니다. 도구가 스키마 비교가 완료되기를 기다립니다.

  3. 스키마 메뉴에서 모든 요소를 포함으로 표시를 클릭합니다.

  4. 파일 메뉴에서 LDIF 파일 만들기를 클릭하여 변경 내용이 포함된 LDF 파일을 만듭니다.

    참고

    이 LDF 파일을 ADAM로 직접 가져오는 경우 필요한 특성이 올바르게 추가되거나 수정되지 않을 수 있습니다.

  5. 오류 메시지가 표시되지 않습니다. 이 문제가 발생하는 이유에 대한 설명은 "LDF 파일을 ADAM로 직접 가져올 수 없는 이유" 섹션을 참조하세요. 이 경우 LDF 파일을 가져오지 않고 5단계로 이동합니다.

  6. 4단계에서 만든 LDF 파일을 검사합니다. 특히 문제를 일으키는 클래스를 봅니다. 예를 들어 Group 클래스를 봅니다. 이 클래스의 섹션에는 Active Directory에서 이 클래스의 필수 또는 선택적 특성 목록에 있지만 ADAM에서 누락된 특성 목록이 포함됩니다.

  7. LDF 파일에서 문제 특성을 찾습니다. 이렇게 하려면 LDF 파일의 "#attributes" 섹션을 검사합니다. 가져오지 않은 특성은 이 섹션에 남아 있습니다. 일반적으로 문제 특성은 "#attributes" 섹션에서 찾을 수 있는 유일한 특성입니다. 문제 특성을 찾으면 8단계로 이동합니다. 문제 특성을 찾을 수 없는 경우 7단계로 이동합니다.

  8. LDF 파일의 "#attributes" 섹션에서 문제 특성이 명확하지 않은 경우 다음 단계에 따라 문제 특성을 찾습니다.

    1. 현재 클래스에 대한 모든 수정 내용은 LDF 파일의 한 섹션 아래에 있습니다. "#Updating 요소 표시" 섹션입니다. 이 섹션에서 문제가 있는 클래스를 업데이트하는 섹션을 찾습니다. 예를 들어 Group 클래스가 문제인 경우 다음과 유사한 섹션을 찾을 수 있습니다.

      # Update 요소: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      추가: mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      # mayContain: groupAttributes
      mayContain: 1.2.840.113556.1.4.152
      # mayContain: groupMembershipSAM
      mayContain: 1.2.840.113556.1.4.166
      -

      참고 여기에 있을 수 있는 일부 항목은 이 예제에서 제외되었습니다.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

    2. 항목을 작업당 단일 특성으로 분할하여 4a단계에서 찾은 항목을 변경합니다. 예를 들어 다음과 유사한 항목을 사용하여 7a단계의 예제에서 항목을 변경합니다.

      # Update 요소: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      추가: mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      -

      # Update 요소: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      추가: mayContain
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      -

      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      추가: mayContain
      # mayContain: groupAttributes
      mayContain: 1.2.840.113556.1.4.152
      -

      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      추가: mayContain
      # mayContain: groupMembershipSAM
      mayContain: 1.2.840.113556.1.4.166
      -

      참고 여기에 있을 수 있는 일부 항목은 이 예제에서 제외되었습니다.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

  9. LDF 파일을 저장합니다.

  10. LDF 파일의 시작 부분에 제공된 명령을 사용하여 LDF 파일을 ADAM 스키마로 가져옵니다.

  11. Ldifde 유틸리티에 의해 표시되는 보고서를 봅니다. 이제 Ldifde는 가져오지 않은 특성과 함께 발생하는 오류를 보고합니다. 오류 정보는 다음 샘플 정보와 유사합니다.

    ldifde -i -u -f c:\data\problem\KBtest_modified.ldf -s localhost:50010 -j .-c "cn=Configuration,dc=X" #configurationNamingContext  
    Connecting to "localhost:50010"
    

    SSPI를 사용하여 현재 사용자로 로그인
    파일 "c:\data\problem\KBtest_modified.ldf"에서 디렉터리 가져오기
    항목 로드.
    줄 15에 오류 추가: 이미 있음
    서버 쪽 오류는 다음과 같습니다. 0x2071 개체를 에 추가하려고 했습니다.
    이미 사용 중인 이름이 있는 ectory입니다.
    확장 서버 오류는 다음과 같습니다.
    00002071: UpdErr: DSID-0305030D, 문제 6005(ENTRY_EXISTS), 데이터 0

    참고

    오류 보고서에 표시된 줄 번호를 확인하여 LDF 파일에서 문제 특성을 찾습니다.

  12. 이 오류 정보를 사용하여 문제 특성을 찾고 문제를 resolve. 다음 단계에 따라 문제를 resolve.

    1. 오류 보고서에 표시된 줄 번호를 확인하여 LDF 파일에서 문제 특성을 찾습니다. 실패한 특성은 DisplayName에 "DUP-" 접두사를 가질 수 있습니다.
    2. 특성의 OID(개체 식별자)를 확인하고 ADAM에서 이 개체 식별자를 찾습니다.
    3. ADAM에서 동일한 개체 식별자가 있는 특성을 찾습니다.
    4. ADAM 및 LDF 파일의 특성을 비교하여 차이점을 찾습니다. 예를 들어 특성에는 다른 DisplayName이 있지만 개체 식별자는 동일할 수 있습니다.
    5. 유지할 특성을 결정한 다음 다른 특성을 수정합니다. 예를 들어 LDF 파일에서 항목을 제거하거나 ADAM 특성 항목을 수정할 수 있습니다. 또는 XML 구성 파일의 제외> 섹션을 사용하여 <동기화에서 문제 특성을 제외할 수 있습니다.
  13. Active Directory 또는 ADAM 스키마에서 문제 특성이 수정되었거나 LDF 파일에서 특성이 제거된 후 수정된 LDF 파일을 다시 가져옵니다. 이제 가져오기 작업이 성공해야 합니다. 문제가 해결되지 않으면 문제를 일으키는 다른 특성이 있을 수 있습니다. 모든 특성을 가져올 때까지 10~12단계를 반복합니다.

진단 로깅

문제 특성을 찾으면 무엇이 잘못되어 있는지 명확하지 않을 수 있습니다. 예를 들어 중복 개체 식별자 또는 을 찾을 수 없습니다.

다른 DisplayName 항목입니다. 문제 특성을 가져오지 않으면 LDAP 인터페이스에 대한 디버그 로깅을 켜서 오류에 대한 자세한 정보를 얻을 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.

  1. ldifde 오류에 대한 자세한 정보를 얻으려면 ADAM에서 LDAP 로깅을 켭니다. 이렇게 하려면 범주 16 LDAP 인터페이스 이벤트 레지스트리 항목의 값을 5로 변경합니다. 이 레지스트리 항목은 다음 레지스트리 하위 키 아래에 있습니다. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ADAM_instanceName\Diagnostics

  2. LDF 파일을 다시 가져옵니다.

  3. 이벤트 로그에서 오류를 확인합니다.

  4. 문제 해결을 완료한 후 범주 16 LDAP 인터페이스 이벤트 레지스트리 항목의 값을 0으로 다시 설정합니다. 그렇지 않으면 이벤트 로그가 플러드됩니다.

Microsoft 지원 문의

이 문서의 단계를 완료한 후 문제가 해결되지 않으면 Microsoft 지원 문의하세요.

상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

Adamsync 도구를 사용하여 Active Directory에서 ADAM으로 데이터를 동기화하려면 다음 단계를 수행합니다.

  1. 시작을 클릭하고 모든 프로그램을 가리키고 ADAM을 가리킨 다음 ADAM 도구 명령 프롬프트를 클릭합니다.
  2. 명령 프롬프트에서 다음 명령을 입력한 다음 Enter 키를 누릅니다. adamsync /fs Server_Name: port_numberconfigurationName /log log_file_name.log

LDF 파일을 ADAM으로 직접 가져올 수 없는 이유

1단계에서 만든 LDF 파일을 "특성이 TOP 클래스에 속하지 않을 때 문제를 resolve 단계" 섹션에서 ADAM로 가져오는 경우 이러한 특성은 ADAM의 특성 목록에 추가되지 않습니다. ADAM 스키마 MMC 또는 ADSIEDIT를 사용하여 스키마를 검사하여 이 동작을 확인할 수 있습니다. 이 동작은 Ldifde 가져오기 작업이 자동으로 실패하기 때문에 발생합니다. 현재 Ldifde는 오류를 보고하지 않습니다. ADSchemaAnalyzer가 LDF 파일을 생성하는 방식으로 인해 자동으로 실패합니다. ADSchemaAnalyzer는 ntdsschemaaddntdsSchemamodify 명령을 사용합니다. 이러한 명령은 허용되는 LDAP 컨트롤을 켭니다. 즉, 모든 실패는 자동입니다.

또한 각 클래스에 대해 선택적 특성 목록에 추가할 모든 특성이 하나의 추가/수정 작업에 추가됩니다. 따라서 특성 중 하나를 추가하는 데 문제가 있는 경우 전체 작업이 실패하고 목록에 특성이 추가되지 않습니다. 따라서 문제 특성을 찾으려면 추가 단계를 수행해야 합니다.

일반적으로 실패의 원인은 특성의 중복 개체 식별자이거나 Active Directory 및 ADAM의 특성 정의에서 다른 차이점이 있기 때문입니다. 즉, 중복된 OID가 누락될 수 있으며, LDapDisplayName이 ADAM에 없는 경우 특성이 새 특성으로 표시될 수 있습니다.