共用方式為


停用現有類別和屬性

架構新增是永久性的。 您無法刪除 attributeSchemaclassSchema 物件。 在分散式系統中,很難保證沒有指定類別或屬性的實例。 拿掉類別或屬性的定義會損害該類別或屬性的現有實例。

您可以將現有類別或屬性標示為「已失效」,以停用它。 這不會影響類別或屬性的現有實例標示,但會防止建立新的實例。

停用架構類別和屬性時,適用下列限制:

  • 您無法停用 Category 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” 是常數)