Deaktivieren vorhandener Klassen und Attribute
Schemazufügungen sind dauerhaft. AttributeSchema- und classSchema-Objekte können nicht gelöscht werden. In einem verteilten System ist es schwierig, sicherzustellen, dass es keine Instanzen einer bestimmten Klasse oder eines bestimmten Attributs gibt. Das Entfernen der Definition einer Klasse oder eines Attributs beschädigt vorhandene Instanzen dieser Klasse oder dieses Attributs.
Sie können eine vorhandene Klasse oder ein vorhandenes Attribut deaktivieren, indem Sie sie als "nicht aktiviert" markieren. Dies wirkt sich nicht auf vorhandene Instanzen der so markierten Klasse oder des Attributs aus, verhindert jedoch die Erstellung neuer Instanzen.
Beim Deaktivieren von Schemaklassen und Attributen gelten die folgenden Einschränkungen:
- Sie können eine Klasse oder ein Attribut der Kategorie 1 nicht deaktivieren.
- Sie können ein Attribut nicht deaktivieren, das ein Mitglied einer Klasse ist, die nicht ebenfalls deaktiviert ist. Dies liegt daran, dass möglicherweise ein Attribut für die (nicht deaktivierte) Klasse erforderlich ist, und das Deaktivieren des Attributs verhindert, dass neue Instanzen der Klasse erstellt werden.
Um ein Attribut zu deaktivieren, legen Sie das isDefunct-Attribut des attributSchema-Objekts auf TRUE fest. Wenn ein Attribut deaktiviert ist, können keine neuen Instanzen des Attributs erstellt werden. Um das Attribut erneut zu aktivieren, legen Sie das attribut isDefunct auf FALSE fest.
Um eine Klasse zu deaktivieren, legen Sie das isDefunct-Attribut ihres classSchema-Objekts auf TRUE fest. Wenn eine Klasse deaktiviert ist, können keine neuen Instanzen der Klasse erstellt werden. Legen Sie zum erneuten Aktivieren der Klasse das Attribut isDefunct auf FALSE fest.
Das Festlegen von Schemaobjekten als nicht festgelegt kann in Produktionsumgebungen nützlich sein. Wenn eine Testversion einer Schemaerweiterung nicht mehr erforderlich ist, markieren Sie sie als nicht mehr vorhanden. Sie können es wiederherstellen, indem Sie das Attribut isDefunct entfernen oder den Attributwert auf FALSE festlegen. Dies schützt auch vor einem unbeabsichtigten Entfernen eines Schemaobjekts, indem es auf nicht aktiviert festgelegt wird, da der Vorgang problemlos rückgängig gemacht werden kann.
Beachten Sie, dass der Active Directory-Server keine vorhandenen Instanzen eines Attributs oder einer Klasse sauber, wenn Sie ein Schemaobjekt ungültig machen. Wenn Sie die isDefunct-Eigenschaft entfernen, werden alle Instanzen wieder gültig, normale Objekte.
Die folgende Liste enthält andere Folgen des Markierens eines attributSchema - oder classSchema-Objekts , das nicht mehr vorhanden ist:
- Das Hinzufügen oder Ändern einer instance schlägt fehl.
- Fehlercodes verhalten sich so, als ob nie eine nicht mehr vorhandene Klasse vorhanden wäre.
- Suchen und Löschen verhalten sich so, als ob keine Schemaobjekte außer Kraft gesetzt wurden.
- Lassen Sie nur das Löschen des gesamten Attributs aus dem Objekt zu.
Die folgende Liste enthält zusätzliche Optionen in einer Produktionsumgebung, um die Auswirkungen nicht mehr vorhandener Schemaerweiterungen zu verringern:
- Entfernen Sie alle mayHave-Attributwerte aus einer nicht mehr erhaltenen Klasse.
- Reduzieren Sie die Größe aller mustHave-Attributwerte einer nicht mehr erhaltenen Klasse.
- Entfernen Sie ein nicht mehr ausgeführtes Attribut aus dem globalen Katalog.
- Entfernen Sie ein nicht mehr erhaltenes Attribut aus einem beliebigen Index.
Andere Optionen zum Entfernen unerwünschter Schemaänderungen in einer Produktionsumgebung sind für Entwickler, einen privaten Domänencontroller zum Testen zu verwenden. In diesem Fall können Sie:
- "Zurücksetzen" des Active Directory-Servers mithilfe von Dcpromo.exe zum Herabstufen des DC. Verwenden Sie nach Abschluss der Deversion erneut Dcpromo.exe, um den Server wieder auf einen DC heraufzustufen. Der Entwickler kann dann LDIF-Skripts verwenden, um alle erforderlichen Klassen, Attribute und Objektinstanzen neu zu laden.
- Verwenden Sie Ntbackup.exe, um eine Systemstatussicherung auf einer verfügbaren Datenträgerpartition durchzuführen. Starten Sie den Wiederherstellungsmodus des sicheren/Verzeichnisdiensts neu, um sie wiederherzustellen.
Wenn Sie bei Windows Server 2003-Betriebssystemen eine Klasse oder ein Attribut auf nicht aktiviert festlegen, können Sie die Werte ldapDisplayName, schemaIdGuid, OID und mapiID des nicht mehr vorhandenen Schemaelements sofort wiederverwenden, wenn Sie eine neue Klasse oder ein neues Attribut erstellen, um es zu ersetzen. Die nicht mehr vorhandene Version der Klasse oder des Attributs wird im Schemacontainer beibehalten, aber im MMC-Snap-In ausgeblendet. Um das alte Schemaelement erneut zu aktivieren, legen Sie isDefunct auf FALSE fest.
Das folgende LDIF-Codebeispiel zeigt, wie Sie das attribut isDefunct ändern und den RDN so ändern, dass es nicht mit der neuen Klasse verwechselt wird, die Sie zum Ersetzen erstellen.
dn: CN=MyClass,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: isDefunct
isDefunct: TRUE
-
dn: CN=MyClass,CN=Schema,CN=Configuration,DC=X
changetype: modrdn
newrdn: cn=MyClassOld
deleteoldrdn: 1
dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-
Verwenden Sie den folgenden Befehl, um das LDIF-Codebeispiel für eine Gesamtstruktur für einen Computer unter Windows Server 2003-Betriebssystemen auszuführen.
ldifde /i /f rdn.ldf /c "DC=X" "dc=mydomain,dc=com"
(Wobei "DC=X" eine Konstante ist)