停用現有的類別和屬性
架構新增是永久性的。 您無法刪除 attributeSchema 和 classSchema 物件。 在分散式系統中,很難保證沒有指定類別或屬性的實例。 拿掉類別或屬性的定義會損害該類別或屬性的現有實例。
您可以將現有類別或屬性標示為「已失效」,以停用它。 這不會影響類別或屬性的現有實例標示,但會防止建立新的實例。
停用架構類別和屬性時,適用下列限制:
- 您無法停用 Category 1 類別或屬性。
- 您無法停用屬於未停用之類別成員的屬性。 這是因為 可能需要屬性才能建立 (not disabled) 類別,而停用 屬性可防止建立 類別的新實例。
若要停用屬性,請將其 attributeSchema 物件的 isDefunct 屬性設定為 TRUE。 停用屬性時,無法建立屬性的新實例。 若要重新啟用屬性,請將 isDefunct 屬性設定為 FALSE。
若要停用類別,請將其 classSchema 物件的 isDefunct 屬性設定為 TRUE。 停用類別時,無法建立 類別的新實例。 若要重新啟用類別,請將 isDefunct 屬性設定為 FALSE。
將架構物件設定為已用處,在生產環境中很有用。 當不再需要架構延伸模組的測試版本時,請將它標示為已失效。 您可以藉由移除 isDefunct 屬性或將屬性值設定為 FALSE 來還原它。 這也會藉由將架構物件設定為已解除,以防止意外移除架構對象,因為作業很容易反轉。
請注意,當您使架構物件失效時,Active Directory 伺服器不會清除屬性或類別的現有實例。 如果您移除 isDefunct 屬性,任何實例會再次變成有效的一般物件。
下列清單包含標示 attributeSchema 或 classSchema 物件已失效的其他後果:
- 加入或修改實例會失敗。
- 錯誤碼的行為就像不存在無用類別一樣。
- 搜尋和刪除的行為就像沒有任何架構物件已失效一樣。
- 只允許從物件刪除整個屬性。
下列清單包含生產環境中的其他選項,以降低已解除架構延伸的影響:
- 從無用類別中移除所有 mayHave 屬性值。
- 從無用類別減少所有 mustHave 屬性值的大小。
- 從全域編錄中移除無用屬性。
- 從任何索引中移除無用屬性。
在生產環境中移除不需要的架構變更的其他選項,是讓開發人員使用私人域控制器進行測試。 在此情況下,您可以:
- 使用 Dcpromo.exe 降級 DC 來「重設」Active Directory 伺服器。 降級完成後,再次使用 Dcpromo.exe,將伺服器升級回 DC。 然後,開發人員可以使用 LDIF 腳本來重載任何必要的類別、屬性和物件實例。
- 使用Ntbackup.exe,對可用的磁碟分區執行系統狀態備份。 重新啟動至 保管庫/目錄服務還原模式以還原。
針對 Windows Server 2003 操作系統,當您將類別或屬性設定為已失效時,可以在建立新的類別或屬性來取代它時,立即重複使用 已解構架構元素的 ldapDisplayName、 schemaIdGuid、 OID 和 mapiID 值。 類別或屬性的無用版本會保留在架構容器中,但隱藏在 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” 是常數)