Partager via


Désactivation des classes et attributs existants

Les ajouts de schémas sont permanents. Vous ne pouvez pas supprimer les objets attributeSchema et classSchema . Dans un système distribué, il est difficile de garantir qu’il n’existe aucune instance d’une classe ou d’un attribut donné. La suppression de la définition d’une classe ou d’un attribut endommage les instances existantes de cette classe ou attribut.

Vous pouvez désactiver une classe ou un attribut existant en le marquant comme « obsolète ». Cela n’affecte pas les instances existantes de la classe ou de l’attribut ainsi marqué, mais empêche la création de nouvelles instances.

Les restrictions suivantes s’appliquent lors de la désactivation des classes de schéma et des attributs :

  • Vous ne pouvez pas désactiver une classe ou un attribut de catégorie 1.
  • Vous ne pouvez pas désactiver un attribut qui est membre d’une classe qui n’est pas également désactivée. En effet, un attribut peut être requis pour la classe (non désactivée) et la désactivation de l’attribut empêche la création de nouvelles instances de la classe.

Pour désactiver un attribut, définissez l’attribut isDefunct de son objet attributeSchema sur TRUE. Lorsqu’un attribut est désactivé, de nouvelles instances de l’attribut ne peuvent pas être créées. Pour réactiver l’attribut, définissez l’attribut isDefunct sur FALSE.

Pour désactiver une classe, définissez l’attribut isDefunct de son objet classSchema sur TRUE. Lorsqu’une classe est désactivée, de nouvelles instances de la classe ne peuvent pas être créées. Pour réactiver la classe, définissez l’attribut isDefunct sur FALSE.

La définition d’objets de schéma comme obsolètes peut être utile dans les environnements de production. Lorsqu’une version de test d’une extension de schéma n’est plus nécessaire, marquez-la comme étant obsolète. Vous pouvez le restaurer en supprimant l’attribut isDefunct ou en définissant la valeur de l’attribut sur FALSE. Cela protège également contre la suppression involontaire d’un objet de schéma en le définissant sur obsolète, car l’opération peut être facilement inversée.

N’oubliez pas que le serveur Active Directory ne propre pas les instances existantes d’un attribut ou d’une classe lorsque vous créez un objet de schéma obsolète. Si vous supprimez la propriété isDefunct , toutes les instances redeviennent des objets normaux valides.

La liste suivante inclut d’autres conséquences du marquage d’un objet attributeSchema ou classSchema obsolète :

  • L’ajout ou la modification d’un instance échoue.
  • Les codes d’erreur se comportent comme si une classe obsolète n’existait jamais.
  • La recherche et la suppression se comportent comme si aucun objet de schéma n’avait été supprimé.
  • Autorisez uniquement la suppression de l’attribut entier de l’objet.

La liste suivante inclut des options supplémentaires dans un environnement de production pour réduire l’impact des extensions de schéma obsolètes :

  • Supprimez toutes les valeurs d’attribut mayHave d’une classe obsolète.
  • Réduisez la taille de toutes les valeurs d’attribut mustHave à partir d’une classe obsolète.
  • Supprimez un attribut obsolète du catalogue global.
  • Supprimez un attribut obsolète de n’importe quel index.

D’autres options pour supprimer les modifications de schéma indésirables dans un environnement de production permettent aux développeurs d’utiliser un contrôleur de domaine privé à des fins de test. Dans ce cas, vous pouvez :

  • « Réinitialiser » le serveur Active Directory à l’aide de Dcpromo.exe pour rétrograder le contrôleur de domaine. Une fois la rétrogradation terminée, utilisez à nouveau Dcpromo.exe pour promouvoir à nouveau le serveur en contrôleur de domaine. Le développeur peut ensuite utiliser des scripts LDIF pour recharger les classes, attributs et instances d’objet nécessaires.
  • Utilisez Ntbackup.exe pour effectuer une sauvegarde de l’état du système sur une partition de disque disponible. Redémarrez en mode de restauration du service sans échec/d’annuaire pour restaurer.

Pour les systèmes d’exploitation Windows Server 2003, lorsque vous définissez une classe ou un attribut sur obsolète, vous pouvez immédiatement réutiliser les valeurs ldapDisplayName, schemaIdGuid, OID et mapiID de l’élément de schéma obsolète lorsque vous créez une classe ou un attribut pour le remplacer. La version obsolète de la classe ou de l’attribut est conservée dans le conteneur Schema, mais elle est masquée dans le composant logiciel enfichable MMC. Pour réactiver l’ancien élément de schéma, définissez isDefunct surFALSE.

L’exemple de code LDIF suivant montre comment modifier l’attribut isDefunct et modifier le RDN afin qu’il ne soit pas confondu avec la nouvelle classe que vous créez pour le remplacer.

 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
   -

Utilisez la commande suivante pour exécuter l’exemple de code LDIF sur une forêt pour un ordinateur s’exécutant sur des systèmes d’exploitation Windows Server 2003.

ldifde /i /f rdn.ldf /c « DC=X » « dc=mydomain,dc=com »

(Où « DC=X » est une constante)