Temos uma tabela um pouco pesada que é semi-freqüentemente (a cada ~ 5 minutos) sendo recriada por um procedimento. Eu me perguntei se havia algo que poderia ser feito para minimizar o tempo de inatividade durante a reconstrução da tabela e pensei em duas possibilidades até agora (vamos chamar a tabela de "Dispositivo"):
Opção A
1) Crie a nova tabela no procedimento, nomeie-a Device_new
2) Renomeie a tabela antiga de Device
para Device_old
3) Renomeie a nova tabela de Device_new
paraDevice
Opção B
Igual à Opção A, exceto pelo uso de Troca de Partição.
Advertência : a troca de partição é significativamente mais complexa de configurar e possui requisitos bastante rígidos para uso.
Essas opções são soluções ruins, se sim, como você resolveria esse caso de uso? Obrigada.
Você mencionou que a troca de partição é mais complexa, mas não é o caso quando a tabela não é particionada. Pode-se usar
SWITCH
para substituir com eficiência todo o conteúdo de uma tabela não particionada por outra como uma operação apenas de metadados. O requisitoSWITCH
é que as tabelas de origem e destino tenham o mesmo esquema, índices, restrições e estejam alinhadas ao armazenamento. Esses requisitos são presumivelmente os mesmos da técnica de renomeação, portanto, o esforço é semelhante.Observe que, ao contrário do particionamento de tabela com uma função e esquema
SWITCH
de partição, uma tabela não particionada pode ser usada em qualquer edição do SQL Server.Abaixo está um exemplo de script DDL para a opção B: