Eu tenho uma date
função de partição baseada simples usando RANGE LEFT ...
CREATE PARTITION FUNCTION [PF_YEAR_LEFT](date) AS RANGE LEFT
FOR VALUES (N'1992-12-31', N'1993-12-31', N'1994-12-31')
GO
CREATE PARTITION SCHEME [PS_YEAR_LEFT] AS PARTITION [PF_YEAR_LEFT]
TO ([DATA_1992], [DATA_1993], [DATA_1994], [DATA_1995])
GO
No código acima, o grupo de arquivos [DATA_1995] manteria os valores além do último limite de partição. Portanto, se eu optar por adicionar novos grupos de arquivos e dividir a função para limites adicionais dessa maneira ...
ALTER PARTITION SCHEME [PS_YEAR_LEFT] NEXT USED [DATA_1995]
GO
ALTER PARTITION FUNCTION [PF_YEAR_LEFT]() SPLIT RANGE (N'1995-12-31')
GO
ALTER PARTITION SCHEME [PS_YEAR_LEFT] NEXT USED [DATA_1996]
GO
ALTER PARTITION FUNCTION [PF_YEAR_LEFT]() SPLIT RANGE (N'1996-12-31')
GO
O grupo de arquivos [DATA_1995] permanece na última posição de partição para valores além do limite superior.
Este último grupo de arquivos pode ser alterado após a criação inicial do esquema de partição ou é a única maneira de criar um novo esquema de partição e reconstruir todos os índices utilizando o esquema antigo no novo esquema?
A última partição de uma
RANGE LEFT
função é uma partição permanente que não pode ser removida nem a primeira partição de umaRANGE RIGHT
função. Essa é uma das considerações detalhadas em meu artigo de Práticas recomendadas de particionamento de tabela e por que recomendo uma função mais intuitivaRANGE RIGHT
para tipos temporais incrementais junto com limites explícitos para dados dentro do intervalo esperado.Você não precisa ir tão longe a ponto de reconstruir a tabela e os índices existentes para corrigir o grupo de arquivos com nome incorreto. Se você adicionar novas partições usando seu script (tendo o cuidado de garantir que as partições SPLIT estejam vazias), você terminará com este esquema:
Você pode criar um novo esquema com a última partição em um grupo de arquivos fictício (ou PRIMARY), criar uma nova tabela alinhada, alternar todas as partições, exceto a última (que estará vazia se você não tiver dados de 1997+) na nova tabela, solte a tabela antiga, renomeie, etc. Exemplo abaixo.