Se eu tiver uma tabela com uma NVARCHAR(MAX)
coluna e a eliminar, a maneira padrão de recuperar o espaço usado é:
- Reconstrua o índice clusterizado ou
- Corre
DBCC CLEANTABLE
Se eu não executasse nenhum desses, a coluna ainda permanece (visível via sys.system_internals_partition_columns
) na estrutura física da tabela e fizesse um backup e restauração completos do banco de dados, a cópia restaurada ainda teria descartado a coluna em sua estrutura física e ocupam a mesma quantidade de espaço que antes de eu ter largado a coluna?
Para meu próprio caso de uso, estou analisando o SQL Server 2012, mas presumo que isso funcione da mesma forma em todas as versões relativamente modernas. Estou ciente de que isso é fácil de testar, mas espero que alguém tenha mais conhecimento sobre isso, pois não consegui encontrar muito.
Referências:
Eu escrevi sobre como você pode usar DBCC CLEANTABLE para recuperar o espaço.
Sob o capô, o sql server apenas desaloca as páginas e, em seguida, um thread em segundo plano chamado limpeza fantasma limpará os dados.
Outro aspecto que estou supondo que você está perguntando é a segurança dos dados físicos - como posso ter certeza de que meus dados não serão recuperáveis depois de excluí-los/descartá-los?
Para responder a isso, o SQL Server fornece -
sp_clean_db_free_space
Agora que foi dito, é realmente difícil destruir os dados esp. para coluna de queda
Michael J. Swart tem um post muito interessante sobre It's Hard To Destroy Data - especialmente a tabela de resumo com diferentes opções.