Partilhar via


Desativando classes e atributos existentes

As adições de esquema são permanentes. Não é possível eliminar objetos attributeSchema e classSchema . Em um sistema distribuído, é difícil garantir que não haja instâncias de uma determinada classe ou atributo. A remoção da definição de uma classe ou atributo danifica instâncias existentes dessa classe ou atributo.

Você pode desativar uma classe ou atributo existente marcando-o como "extinto". Isso não afeta instâncias existentes da classe ou atributo assim marcado, mas impede a criação de novas instâncias.

As seguintes restrições se aplicam ao desabilitar classes e atributos de esquema:

  • Não é possível desativar uma classe ou atributo de categoria 1.
  • Não é possível desativar um atributo que seja membro de uma classe que também não esteja desabilitada. Isso ocorre porque um atributo pode ser necessário para a classe (não desabilitada) e desabilitar o atributo impede que novas instâncias da classe sejam criadas.

Para desabilitar um atributo, defina o atributo isDefunct de seu objeto attributeSchema como TRUE. Quando um atributo é desabilitado, novas instâncias do atributo não podem ser criadas. Para reativar o atributo, defina o atributo isDefunct como FALSE.

Para desativar uma classe, defina o atributo isDefunct do objeto classSchema como TRUE. Quando uma classe é desabilitada, novas instâncias da classe não podem ser criadas. Para reativar a classe, defina o atributo isDefunct como FALSE.

Definir objetos de esquema como extintos pode ser útil em ambientes de produção. Quando uma versão de teste de uma extensão de esquema não for mais necessária, marque-a como extinta. Você pode restaurá-lo removendo o atributo isDefunct ou definindo o valor do atributo como FALSE. Isso também protege contra uma remoção não intencional de um objeto de esquema definindo-o como extinto porque a operação pode ser facilmente revertida.

Lembre-se de que o servidor do Ative Directory não limpa instâncias existentes de um atributo ou classe quando você extingue um objeto de esquema. Se você remover a propriedade isDefunct, todas as instâncias se tornarão objetos normais válidos novamente.

A lista a seguir inclui outras consequências de marcar um attributeSchema ou classSchema objeto obsoleto:

  • A adição ou modificação de uma instância falha.
  • Os códigos de erro se comportam como se uma classe extinta nunca tivesse existido.
  • Pesquisar e excluir se comportam como se nenhum objeto de esquema tivesse sido extinto.
  • Permita apenas excluir todo o atributo do objeto.

A lista a seguir inclui opções adicionais em um ambiente de produção para reduzir o impacto de extensões de esquema extintas:

  • Remova todos os valores de atributo mayHave de uma classe extinta.
  • Reduza o tamanho de todos os valores de atributo mustHave de uma classe extinta.
  • Remova um atributo extinto do catálogo global.
  • Remova um atributo extinto de qualquer índice.

Outras opções para remover alterações de esquema indesejadas em um ambiente de produção são que os desenvolvedores usem um controlador de domínio privado para testes. Neste caso, pode:

  • Redefinir o servidor Active Directory usando Dcpromo.exe para rebaixar o controlador de domínio. Depois que o rebaixamento for concluído, use Dcpromo.exe novamente para promover o servidor de volta a um DC. O desenvolvedor pode usar scripts LDIF para recarregar quaisquer classes, atributos e instâncias de objeto necessários.
  • Use Ntbackup.exe para executar um backup de estado do sistema para uma partição de disco disponível. Reinicialize no modo Safe/Directory Service Restore para restaurar.

Para sistemas operacionais Windows Server 2003, ao definir uma classe ou atributo como extinto, você pode reutilizar imediatamente o ldapDisplayName, schemaIdGuid, OID e mapiID valores do elemento de esquema extinto ao criar uma nova classe ou atributo para substituí-lo. A versão extinta da classe ou atributo é mantida no contêiner Schema, mas está oculta no snap-in do MMC. Para reativar o elemento de esquema antigo, defina isDefunct como FALSE.

O exemplo de código LDIF a seguir mostra como modificar o atributo isDefunct e alterar o RDN para que ele não seja confundido com a nova classe que você cria para substituí-lo.

 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
   -

Use o comando a seguir para executar o exemplo de código LDIF em uma floresta para um computador em execução em sistemas operacionais Windows Server 2003.

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

(Onde "DC=X" é uma constante)