禁用现有类和属性

架构添加是永久添加。 不能删除 attributeSchemaclassSchema 对象。 在分布式系统中,难以保证没有给定类或属性的实例。 删除类或属性的定义会损害该类或属性的现有实例。

通过标记为“失效”,可以禁用现有类或属性。 这不会影响这样标记的类或属性的现有实例,但会阻止创建新实例。

禁用架构类和属性时,适用以下限制:

  • 不能禁用类别 1 类或属性。
  • 不能禁用属于也未禁用的类的成员的属性。 这是因为(未禁用)类可能需要属性,并且禁用该属性会阻止创建该类的新实例。

若要禁用某个属性,请将其 attributeSchema 对象的 isDefunct 属性设置为 TRUE。 禁用属性后,无法创建该属性的新实例。 若要重新启用属性,请将 isDefunct 属性设置为 FALSE

若要禁用类,请将其 classSchema 对象的 isDefunct 属性设置为 TRUE。 禁用类后,无法创建该类的新实例。 若要重新启用类,请将 isDefunct 属性设置为 FALSE

将架构对象设置为失效在生产环境中可能很有用。 不再需要架构扩展的测试版本时,将其标记为失效。 通过删除 isDefunct 属性或将属性值设置为 FALSE,可将其还原。 这还可以防止意外删除架构对象,方法是将其设置为失效,因为可轻松逆转操作。

请注意,将架构对象设为失效时,Active Directory 服务器不会清理属性或类的现有实例。 如果删除 isDefunct 属性,则任何实例都将再次变为有效的普通对象。

以下列表包括将 attributeSchemaclassSchema 对象标记为失效的其他后果:

  • 添加或修改实例失败。
  • 错误代码的行为就像从未存在失效类一样。
  • 搜索和删除行为就像没有将任何架构对象设为失效一样。
  • 仅允许从对象中删除整个属性。

以下列表包括生产环境中用于减少失效架构扩展影响的其他选项:

  • 从失效类中删除所有 mayHave 属性值。
  • 减小失效类中所有 mustHave 属性值的大小。
  • 从全局目录中删除失效属性。
  • 从任何索引中删除失效属性。

用于在生产环境中删除不需要的架构更改的其他选项可供开发人员使用专用域控制器进行测试。 在这种情况下,您可以:

  • 使用 Dcpromo.exe 降级 DC 来“重置”Active Directory 服务器。 降级完成后,再次使用 Dcpromo.exe 将服务器提升回 DC。 然后,开发人员可以使用 LDIF 脚本重新加载任何必需的类、属性和对象实例。
  • 使用 Ntbackup.exe 对可用磁盘分区执行系统状态备份。 重新启动到安全/目录服务还原模式以进行还原。

对于 Windows Server 2003 操作系统,将类或属性设置为失效时,可以在创建新类或属性以将其替换时,立即重用失效架构元素的 ldapDisplayNameschemaIdGuidOIDmapiID 值。 类或属性的失效版本将保留在架构容器中,但在 MMC 管理单元中处于隐藏状态。 若要重新激活旧架构元素,请将 isDefunct 设置为 FALSE

以下 LDIF 代码示例演示如何修改 isDefunct 属性并更改 RDN,从而不会将其与创建用来替换它的新类混淆。

 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
   -

使用以下命令针对在 Windows Server 2003 操作系统上运行的计算机的林运行 LDIF 代码示例。

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

(其中“DC=X”是常量)