Устранение ошибки OBJ_CLASS_VIOLATION в Adamsync

В этой статье описывается, как устранить ошибку OBJ_CLASS_VIOLATION, возникающую при использовании средства Adamsync в Windows Server.

Применяется к: Windows Server 2012 R2
Исходный номер базы знаний: 923835

Сводка

Эта ошибка возникает из-за различий в определении классов между службой каталогов Active Directory и экземпляром ADAM. Чтобы устранить эту проблему, выполните действия, описанные в следующих разделах:

  • Определение атрибута и класса объекта
  • Действия по устранению проблемы, когда атрибуты относятся к классу TOP
  • Действия по устранению проблемы, когда атрибуты не относятся к классу TOP

Симптомы

Вы пытаетесь использовать средство синхронизации режима приложения Active Directory (ADAM) (Adamsync.exe) для синхронизации объектов Active Directory с экземпляром ADAM на сервере Windows Server. Однако в файле журнала Adamsync регистрируется сообщение об ошибке, похожее на следующее:

Запись обработки: page X, Frame X, Entry X, Count X, USN X Processing Source entry
<guid=f9023a23e3a06d408f07a0d51c301f38> Обработка в область записи
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), data -2054643804

Причина

Эта проблема возникает из-за различий в определении классов между Active Directory и ADAM. Это различие появляется при попытке изменить объект для включения атрибута, который является недопустимым для его класса. Например, атрибут вообще не определен в схеме ADAM или атрибут определен, но атрибут отсутствует в списке обязательных или необязательных атрибутов для конкретного класса. Как правило, вторая ситуация является наиболее частой причиной этой проблемы.

Определение класса для объекта, который требуется синхронизировать, содержит один или несколько атрибутов в Active Directory, недоступных в ADAM. В разделе "Добавление атрибутов" сообщения об ошибке, упомянутого в разделе "Симптомы", отображаются атрибуты, которые вы пытаетесь добавить. Эти атрибуты определены в списке необязательных или обязательных атрибутов для класса синхронизируемого объекта.

Например, в сообщении об ошибке, упоминаемом в разделе "Симптомы", ссылочным объектом является CN=TestGroup. При просмотре объекта CN=TestGroup в Active Directory и проверка список атрибутов для этого класса и всех родительских классов вы увидите, что один или несколько атрибутов в этом списке отсутствуют в списке обязательных или необязательных атрибутов, которые включены для этого класса в ADAM.

Примечание.

Сюда входят списки атрибутов из всех родительских классов.

Разрешение

Чтобы устранить эту проблему, выполните следующие действия.

Определение атрибутов и класса объекта

  1. Проверьте список атрибутов, добавляемых в объект, для которого произошел сбой. Чтобы определить объект, который завершился сбоем, просмотрите сообщение об ошибке в журнале синхронизации. Объект failed всегда является последним объектом, который указывается в конце журнала синхронизации непосредственно перед сообщением об ошибке. Например, объект CN=TestGroup завершился ошибкой в сообщении об ошибке, которое упоминается в разделе "Симптомы".
  2. Определите, включены ли атрибуты DisplayNamePrintable, Flags или ExtensionName в сообщение об ошибке. Если один из этих атрибутов включен в сообщение об ошибке, см. раздел "Действия по устранению проблемы, когда атрибуты относятся к классу TOP". Если в сообщение об ошибке нет атрибутов, см. раздел "Шаги по устранению проблемы, если атрибуты не принадлежат к классу TOP".

Действия по устранению проблемы, когда атрибуты относятся к классу TOP

Вы увидите, что класс TOP в схеме Active Directory содержит атрибут DisplayNamePrintable, Flags или ExtensionName. Однако эти атрибуты не содержатся в классе TOP в ADAM. Однако нельзя изменить класс TOP в ADAM. Поэтому для устранения проблемы используйте один из следующих методов:

  • Исключите эти атрибуты с помощью <раздела exclude> в XML-файле конфигурации.
  • Используя схему MMC, вручную добавьте эти атрибуты в список необязательных атрибутов для соответствующего класса в схеме ADAM. Например, в сообщении об ошибке, упомянутом в разделе "Симптомы", неудающийся объект является классом Group. Поэтому необходимо добавить эти атрибуты в список Необязательные атрибуты для класса Group в ADAM.

Действия по устранению проблемы, когда атрибуты не относятся к классу TOP

  1. В ADSchemaAnalyzer в меню Параметры инструментов\ щелкните Обновить со ссылками на новые и представить элементы на вкладке создание LDIF.

  2. Используйте меню Файл , чтобы загрузить Active Directory в качестве целевой схемы и ADAM в качестве базовой схемы. Подождите, пока средство завершит сравнение схем.

  3. В меню Схема выберите пункт Пометить все элементы как включенные.

  4. В меню Файл щелкните Создать LDIF-файл , чтобы создать LDF-файл, содержащий изменения.

    Примечание.

    При импорте этого LDF-файла непосредственно в ADAM необходимые атрибуты, вероятно, будут добавлены или изменены неправильно.

  5. Сообщение об ошибке не отображается. Сведения о том, почему это происходит, см. в разделе "Почему невозможно импортировать LDF-файл непосредственно в ADAM". В этом случае перейдите к шагу 5 без импорта LDF-файла.

  6. Изучите LDF-файл, созданный на шаге 4. В частности, просмотрите класс, вызывающий проблему. Например, просмотрите класс Group. Раздел для этого класса будет содержать список атрибутов, которые присутствуют в списке обязательных или необязательных атрибутов для этого класса в Active Directory, но отсутствуют в ADAM.

  7. Найдите атрибут проблемы в LDF-файле. Для этого изучите раздел "#attributes" в LDF-файле. Атрибуты, которые не импортируются, остаются в этом разделе. Как правило, атрибут проблемы является единственным атрибутом, который можно найти в разделе "#attributes". Если вы нашли атрибут проблемы, перейдите к шагу 8. Если вы не нашли атрибут проблемы, перейдите к шагу 7.

  8. Если атрибут проблемы не очевиден из раздела "#attributes" в LDF-файле, выполните следующие действия, чтобы найти атрибут проблемы:

    1. В настоящее время все изменения класса находятся в одном разделе LDF-файла. Это раздел "#Updating Present Elements". В этом разделе найдите раздел, который обновляет класс с проблемой. Например, если проблема связана с классом Group, вы найдете раздел, похожий на следующий:

      Элемент # Update: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: 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
      add: mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      -

      Элемент # Update: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: mayContain
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      -

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

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

      Примечание. Некоторые другие записи, которые могут находиться здесь, были исключены из этого примера.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

  9. Сохраните LDF-файл.

  10. Импортируйте LDF-файл в схему ADAM с помощью команды, предоставленной в начале LDF-файла.

  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), data 0

    Примечание.

    Найдите атрибут проблемы в LDF-файле, просмотрев номер строки, указанный в отчете об ошибке.

  12. Используйте эти сведения об ошибке, чтобы найти атрибут проблемы и устранить проблему. Чтобы устранить проблему, выполните следующие действия.

    1. Найдите атрибут проблемы в LDF-файле, просмотрев номер строки, указанный в отчете об ошибке. Атрибут failed может иметь префикс "DUP-" в DisplayName.
    2. Обратите внимание на идентификатор объекта (OID) атрибута и найдите этот идентификатор объекта в ADAM.
    3. Найдите атрибут в ADAM с тем же идентификатором объекта.
    4. Сравните атрибут в ADAM и LDF-файле, чтобы найти различия. Например, атрибуты могут иметь другое DisplayName, но тот же идентификатор объекта.
    5. Определите, какой атрибут следует сохранить, а затем исправьте другой атрибут. Например, можно удалить запись из LDF-файла или исправить запись атрибута ADAM. Кроме того, атрибут проблемы можно исключить из синхронизации с помощью <раздела exclude> в XML-файле конфигурации.
  13. После исправления атрибута проблемы в Active Directory или в схеме ADAM или после удаления атрибута из LDF-файла снова импортируйте измененный LDF-файл. Теперь операция импорта должна быть успешной. Если проблема не устранена, может быть другой атрибут, вызывающий проблему. Повторите шаги 10–12, пока не будут импортированы все атрибуты.

Ведение журнала диагностики

При поиске атрибута проблемы может быть не очевидно, что с ним не так. Например, вы не можете найти повторяющийся идентификатор объекта или

другая запись DisplayName. Если атрибут проблемы не импортирован, дополнительные сведения о сбое можно получить, включив ведение журнала отладки для интерфейса LDAP. Для этого выполните следующие действия:

  1. Чтобы получить дополнительные сведения о сбое ldifde, включите ведение журнала LDAP в ADAM. Для этого измените значение для записи реестра событий интерфейса LDAP категории 16 на 5. Эта запись реестра находится в следующем подразделе реестра: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ADAM_instanceName\Diagnostics

  2. Импортируйте LDF-файл еще раз.

  3. Просмотрите журнал событий на наличие ошибок.

  4. После завершения устранения неполадок сбросьте значение для записи реестра событий интерфейса LDAP категории 16 на 0. В противном случае журнал событий будет переполнен.

Контактные служба поддержки Майкрософт

Если проблема не устранена после выполнения действий, описанных в этой статье, обратитесь к служба поддержки Майкрософт.

Статус

Такое поведение является особенностью данного продукта.

Дополнительная информация

Чтобы синхронизировать данные из Active Directory в ADAM с помощью средства Adamsync, выполните следующие действия.

  1. Нажмите кнопку Пуск, наведите указатель мыши на пункт Все программы, наведите указатель на adam, а затем выберите пункт Командная строка инструментов ADAM.
  2. В командной строке введите следующую команду и нажмите клавишу ВВОД: adamsync /fs Server_Name: port_numberconfigurationName /log log_file_name.log

Почему невозможно импортировать LDF-файл непосредственно в ADAM

При импорте LDF-файла, созданного на шаге 1 в разделе "Действия по устранению проблемы, когда атрибуты не относятся к классу TOP", эти атрибуты по-прежнему не добавляются в список атрибутов в ADAM. Это поведение можно проверить с помощью MMC схемы ADAM или ADSIEDIT для проверки схемы. Это происходит из-за того, что операция импорта Ldifde завершается автоматически. В настоящее время Ldifde не сообщает об ошибках. Он завершается автоматическим сбоем из-за того, как ADSchemaAnalyzer создает LDF-файл. ADSchemaAnalyzer использует команды ntdsschemaadd и ntdsSchemamodify . Эти команды включают разрешительный элемент управления LDAP. Это означает, что любой сбой выполняется автоматически.

Кроме того, для каждого класса все атрибуты, добавляемые в список Необязательные атрибуты, добавляются в одну операцию добавления или изменения. Таким образом, если возникает проблема с добавлением одного из атрибутов, вся операция завершается сбоем и атрибуты в списке не добавляются. Поэтому для поиска атрибута проблемы необходимо выполнить дополнительные действия.

Как правило, вероятной причиной сбоя является повторяющийся идентификатор объекта атрибута или другое различие в определениях атрибутов в Active Directory и ADAM. Это означает, что повторяющиеся идентификаторы OID могут быть пропущены, а атрибут может рассматриваться как новый атрибут, если LDapDisplayName не существует в ADAM.