Adamsync'te OBJ_CLASS_VIOLATION hatasıyla ilgili sorunları giderme

Bu makalede, Windows Server'da Adamsync aracını kullandığınızda oluşan bir OBJ_CLASS_VIOLATION hatasını giderme işlemi açıklanır.

Şunlar için geçerlidir: Windows Server 2012 R2
Özgün KB numarası: 923835

Özet

Bu hata, Active Directory dizin hizmeti ile ADAM örneği arasındaki sınıf tanımı farklılıkları nedeniyle oluşur. Bu sorunu gidermek için aşağıdaki bölümlerde açıklanan adımları izleyin:

  • Nesnenin özniteliğini ve sınıfını belirleme
  • Öznitelikler TOP sınıfına ait olduğunda sorunu çözme adımları
  • Öznitelikler TOP sınıfına ait olmadığında sorunu çözme adımları

Belirtiler

Active Directory nesnelerini Bir Windows Server'da ADAM örneğine eşitlemek için Active Directory Uygulama Modu (ADAM) Eşitleyici (Adamsync.exe) aracını kullanmayı deneyin. Ancak, Adamsync günlük dosyasında aşağıdakine benzer bir hata iletisi günlüğe kaydedilir:

İşleme Girdisi: Sayfa X, Çerçeve X, Giriş X, Sayı X, USN X İşleme kaynak girişi
<guid=f9023a23e3a06d408f07a0d51c301f38> Kapsam içi girişi işleme
f9023a23e3a06d408f07a0d51c301f38. Hedef nesne ekleme
CN= TestGroup,OU= Hesapları,dc= etki alanı, dc= com. Öznitelik ekleme: sourceobjectguid, objectClass, instanceType, displayName, info, adminDescription, displayNamePrintable, userAccountControl, codePage, countryCode, logonHours, primaryGroupID, comment, accountExpires, sAMAccountName, desktopProfile, legacyExchangeDN, userPrincipalName

Ldap hatası oluştu. ldap_add_sW: Nesne Sınıfı İhlali. Genişletilmiş Bilgi: 0000207D: UpdErr: DSID-0315119D, sorun 6002 (OBJ_CLASS_VIOLATION), data -2054643804

Neden

Bu sorun, Active Directory ile ADAM arasındaki sınıf tanımı farklılıkları nedeniyle oluşur. Bu fark, bir nesneyi sınıfı için geçersiz olan bir özniteliği içerecek şekilde değiştirmeye çalıştığınızda görünür. Örneğin, öznitelik ADAM şemasında tanımlanmamıştır veya öznitelik tanımlanmıştır, ancak öznitelik belirli bir sınıf için Zorunlu veya İsteğe bağlı öznitelikler listesinde mevcut değildir. Genellikle ikinci durum bu sorunun en sık nedenidir.

Eşitlenecek nesnenin sınıf tanımı, Active Directory'de ADAM'da kullanılamayan bir veya daha fazla öznitelik içerir. "Belirtiler" bölümünde belirtilen hata iletisinin "Öznitelik ekleme" bölümü, eklemeye çalıştığınız öznitelikleri görüntüler. Bu öznitelikler, eşitlenen nesnenin sınıfı için İsteğe bağlı veya Zorunlu öznitelikler listesinde tanımlanır.

Örneğin, "Belirtiler" bölümünde belirtilen hata iletisinde başvuru nesnesi CN=TestGroup'tır. Active Directory'de CN=TestGroup nesnesini görüntülediğinizde ve bu sınıfın ve tüm üst sınıfların öznitelik listesini denetlediğinizde, bu listedeki bir veya daha fazla özniteliğin ADAM'da bu sınıf için etkinleştirilen Zorunlu veya İsteğe bağlı öznitelikler listesinde olmadığını görürsünüz.

Not

Bu, tüm üst sınıflardan öznitelik listelerini içerir.

Çözüm

Bu sorunu çözmek için aşağıdaki adımları izleyin.

Nesnenin özniteliklerini ve sınıfını belirleme

  1. Başarısız olan nesneye eklenen özniteliklerin listesini doğrulayın. Eşitleme günlüğünde hata iletisini görüntüleyerek başarısız olan nesneyi belirleyebilirsiniz. Başarısız nesne her zaman eşitleme günlüğünün sonunda hata iletisinden tam olarak önce gösterilen son nesnedir. Örneğin, "Belirtiler" bölümünde belirtilen hata iletisinde CN=TestGroup nesnesi başarısız oldu.
  2. DisplayNamePrintable, Flags veya ExtensionName özniteliklerinin hata iletisine eklenip eklenmediğini belirleyin. Bu özniteliklerden biri hata iletisine dahil edilirse, "Öznitelikler TOP sınıfına ait olduğunda sorunu çözme adımları" bölümüne bakın. Hata iletisine hiçbir öznitelik eklenmiyorsa, "Öznitelikler TOP sınıfına ait olmadığında sorunu çözme adımları" bölümüne bakın.

Öznitelikler TOP sınıfına ait olduğunda sorunu çözme adımları

Active Directory şemasındaki TOP sınıfının DisplayNamePrintable, Flags veya ExtensionName özniteliğini içerdiğini göreceksiniz. Ancak, bu öznitelikler ADAM'daki TOP sınıfında yer almamaktadır. Ancak, ADAM'da TOP sınıfını değiştiremezsiniz. Bu nedenle, sorunu çözmek için aşağıdaki yöntemlerden birini kullanın:

  • XML yapılandırma dosyasındaki <exclude> bölümünü kullanarak bu öznitelikleri hariç tutun.
  • MMC şemasını kullanarak, bu öznitelikleri ADAM şemasındaki ilgili sınıf için İsteğe bağlı öznitelikler listesine el ile ekleyin. Örneğin, "Belirtiler" bölümünde belirtilen hata iletisinde, başarısız olan nesne Group sınıfına ait olur. Bu nedenle, BU öznitelikleri ADAM'daki Grup sınıfı için İsteğe bağlı öznitelikler listesine eklemeniz gerekir.

Öznitelikler TOP sınıfına ait olmadığında sorunu çözme adımları

  1. ADSchemaAnalyzer'da, Araçlar\Seçenekleri menüsünün altında, LDIF oluşturmasekmesindeki Yeni ve sunu öğelerine başvurularla güncelleştir'e tıklayın.

  2. Hedef şema olarak Active Directory'yi ve temel şema olarak ADAM'ı yüklemek için Dosya menüsünü kullanın. Aracın şemaları karşılaştırmayı bitirmesini bekleyin.

  3. Şema menüsünde Tüm öğeleri dahil olarak işaretle'ye tıklayın.

  4. Dosya menüsünde LDIF dosyası oluştur'a tıklayarak değişiklikleri içeren bir LDF dosyası oluşturun.

    Not

    Bu LDF dosyasını doğrudan ADAM'a aktarırsanız, gerekli öznitelikler büyük olasılıkla doğru şekilde eklenmez veya değiştirilmez.

  5. Hiçbir hata iletisi görüntülenmez. Bunun neden oluştuğuna ilişkin bir açıklama için "LDF dosyasını doğrudan ADAM'a neden aktaramıyorsunuz" bölümüne bakın. Bu durumda, LDF dosyasını içeri aktarmadan 5. adıma gidin.

  6. 4. adımda oluşturduğunuz LDF dosyasını inceleyin. Özellikle, soruna neden olan sınıfı görüntüleyin. Örneğin, Group sınıfını görüntüleyin. Bu sınıfın bölümü, Active Directory'de bu sınıf için Zorunlu veya İsteğe Bağlı öznitelikler listesinde bulunan ancak ADAM'da eksik olan özniteliklerin listesini içerir.

  7. LDF dosyasında sorun özniteliğini bulun. Bunu yapmak için LDF dosyasındaki "#attributes" bölümünü inceleyin. İçeri aktarılmayan öznitelikler bu bölümde kalır. Genellikle sorun özniteliği, "#attributes" bölümünde bulduğunuz tek özniteliktir. Sorun özniteliğini bulursanız 8. adıma gidin. Sorun özniteliğini bulamazsanız 7. adıma gidin.

  8. Sorun özniteliği LDF dosyasındaki "#attributes" bölümünde belirgin değilse, sorun özniteliğini bulmak için şu adımları izleyin:

    1. Şu anda bir sınıfta yapılan tüm değişiklikler LDF dosyasındaki bir bölümün altındadır. Bu , "#Updating Sunum Öğeleri" bölümüdür. Bu bölümün altında, sorunu olan sınıfı güncelleştiren bölümü bulun. Örneğin, sorun Group sınıfıysa aşağıdakine benzer bir bölüm bulursunuz:

      # Update öğesi: 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
      -

      Not Burada bulunabilecek diğer bazı girdiler bu örnekten dışlanmıştır.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

    2. 4a adımında bulunan girişleri, her işlem için tek bir özniteliğe bölerek değiştirin. Örneğin, aşağıdakine benzer girişleri kullanarak 7a adımındaki örnekteki girişleri değiştirin:

      # Update öğesi: 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 öğesi: 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
      -

      Not Burada bulunabilecek diğer bazı girdiler bu örnekten dışlanmıştır.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

  9. LDF dosyasını kaydedin.

  10. LDF dosyasının başında sağlanan komutu kullanarak LDF dosyasını ADAM şemasına aktarın.

  11. Ldifde yardımcı programı tarafından görüntülenen raporu görüntüleyin. Ldifde artık içeri aktarılmayan özniteliklerle oluşan hataları bildirecek. Hata bilgileri aşağıdaki örnek bilgilere benzer:

    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 kullanarak geçerli kullanıcı olarak oturum açma
    "c:\data\problem\KBtest_modified.ldf" dosyasından dizin içeri aktarıyor
    Girdiler yükleniyor.
    15. satıra hata ekleme: Zaten Var
    Sunucu tarafı hatası: 0x2071 Nesnesi ekleme girişiminde bulunuldu:
    zaten kullanımda olan bir adla ectory.
    Genişletilmiş sunucu hatası:
    00002071: UpdErr: DSID-0305030D, sorun 6005 (ENTRY_EXISTS), veri 0

    Not

    Hata raporunda belirtilen satır numarasını görüntüleyerek LDF dosyasında sorun özniteliğini bulun.

  12. Sorun özniteliğini bulmak ve sorunu çözmek için bu hata bilgilerini kullanın. Sorunu çözmeyi denemek için şu adımları izleyin:

    1. Hata raporunda belirtilen satır numarasını görüntüleyerek LDF dosyasında sorun özniteliğini bulun. Başarısız özniteliğin DisplayName içinde bir "DUP-" ön eki olabilir.
    2. Özniteliğin nesne tanımlayıcısını (OID) not edin ve ADAM'da bu nesne tanımlayıcısını arayın.
    3. ADAM'da aynı nesne tanımlayıcısı olan özniteliği bulun.
    4. Farkları bulmak için ADAM ve LDF dosyasında özniteliğini karşılaştırın. Örneğin, öznitelikler farklı bir DisplayName'e ancak aynı nesne tanımlayıcıya sahip olabilir.
    5. Hangi özniteliğin tutulacaklarına karar verin ve ardından diğerini düzeltin. Örneğin, girişi LDF dosyasından kaldırabilir veya ADAM öznitelik girdisini düzeltebilirsiniz. Alternatif olarak, XML yapılandırma dosyasındaki exclude> bölümünü kullanarak <sorun özniteliğini eşitlemenin dışında tutabilirsiniz.
  13. Sorun özniteliği Active Directory'de veya ADAM şemasında düzeltildikten sonra veya öznitelik LDF dosyasından kaldırıldıktan sonra değiştirilen LDF dosyasını yeniden içeri aktarın. Şimdi içeri aktarma işlemi başarılı olmalıdır. Sorun çözülmezse, soruna neden olan başka bir öznitelik olabilir. Tüm öznitelikler içeri aktarılana kadar 10 ile 12 arasındaki adımları yineleyin.

Tanılama Günlüğü

Sorun özniteliğini bulduğunuzda, sorunun ne olduğu açık olmayabilir. Örneğin, yinelenen bir nesne tanımlayıcısı veya

farklı DisplayName girdisi. Bir sorun özniteliği içeri aktarılmadığında, LDAP arabirimi için hata ayıklama günlüğünü açarak hata hakkında daha fazla bilgi edinebilirsiniz. Bunu yapmak için şu adımları uygulayın:

  1. Ldifde hatası hakkında daha fazla bilgi edinmek için ADAM'da LDAP günlüğünü açın. Bunu yapmak için Kategori 16 LDAP Arabirimi olayları kayıt defteri girdisinin değerini 5 olarak değiştirin. Bu kayıt defteri girdisi aşağıdaki kayıt defteri alt anahtarı altında bulunur: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ADAM_instanceName\Diagnostics

  2. LDF dosyasını yeniden içeri aktarın.

  3. Hatalara karşı olay günlüğüne bakın.

  4. Sorun gidermeyi tamamladıktan sonra Kategori 16 LDAP Arabirimi olayları kayıt defteri girdisinin değerini 0 olarak sıfırlayın. Aksi takdirde, olay günlüğü sular altında kalır.

İletişim Microsoft Desteği

Bu makaledeki adımları tamamladıktan sonra sorun çözülmezse Microsoft Desteği başvurun.

Durum

Bu davranış tasarımdan kaynaklanır.

Daha fazla bilgi

Adamsync aracını kullanarak Active Directory'den ADAM'a veri eşitlemek için şu adımları izleyin:

  1. Başlat'a tıklayın, Tüm Programlar'ın üzerine gelin, ADAM'ın üzerine gelin ve ADAM Araçları Komut İstemi'ne tıklayın.
  2. Komut isteminde aşağıdaki komutu yazın ve ENTER tuşuna basın: adamsync /fs Server_Name: port_numberconfigurationName /log log_file_name.log

LDF dosyasını neden doğrudan ADAM'a aktaramıyorsunuz?

1. adımda oluşturduğunuz LDF dosyasını "Öznitelikler TOP sınıfına ait olmadığında sorunu çözme adımları" bölümünün altında ADAM'a aktarırsanız, bu öznitelikler HALA ADAM'daki öznitelik listesine eklenmez. Şemayı incelemek için ADAM şeması MMC veya ADSIEDIT kullanarak bu davranışı doğrulayabilirsiniz. Ldifde içeri aktarma işlemi sessizce başarısız olduğundan bu davranış oluşur. Şu anda Ldifde hata bildirmiyor. ADSchemaAnalyzer'ın LDF dosyasını oluşturma şekli nedeniyle sessizce başarısız olur. ADSchemaAnalyzer , ntdsschemaadd ve ntdsSchemamodify komutlarını kullanır. Bu komutlar izinli LDAP denetimini açar. Bu, herhangi bir hatanın sessiz olduğu anlamına gelir.

Ayrıca, her sınıf için İsteğe bağlı öznitelikler listesine eklenecek tüm öznitelikler tek bir ekleme/değiştirme işlemine eklenir. Bu nedenle, özniteliklerden birini eklerken bir sorun oluşursa, tüm işlem başarısız olur ve listeye öznitelik eklenmez. Bu nedenle, sorun özniteliğini bulmak için ek adımlar atılmalıdır.

Genellikle, hatanın olası nedeni bir özniteliğin yinelenen nesne tanımlayıcısı veya Active Directory ve ADAM'daki öznitelik tanımlarındaki başka bir farktır. Başka bir deyişle, yinelenen OID'ler kaçırılabilir ve LDapDisplayName ADAM'da yoksa bir öznitelik yeni bir öznitelik olarak görülebilir.