Há um cenário em que muitos, mais de 175 bancos de dados devem ser combinados em um grande banco de dados em nuvem e isso deve ser suportado em vários ambientes, desenvolvimento, teste, produção de estágio, etc. Atualmente, a chave primária é baseada no identificador do cliente, que é o banco de dados de onde vieram esses dados. A segurança baseada em linha será usada neste cenário com base na mesma coluna. Algumas das tabelas maiores chegarão a quase 1 bilhão de linhas.
O problema é que, principalmente nos ambientes inferiores, as restaurações são comuns. Para acomodar o truncamento de grandes faixas de dados em tempo hábil, tenho pesquisado o particionamento com base no identificador do cliente (ou seja, "COKE"|"PEPSI" etc.), que também é o PK de todas as tabelas. Isso permitiria a movimentação de dados para dentro e para fora e, possivelmente, uma indexação mais eficiente. A chave do cliente pode ser usada na função de particionamento? Tenho experiência com partição baseada em data à direita, no entanto, não tenho certeza de como é gerenciável ou possível alterar uma função de partição adicionando uma nova partição entre duas existentes?
Talvez isso possa ser resolvido usando um identificador sequencial para clientes e, à medida que novos clientes entram, eles obtêm o próximo id sequencialmente e uma nova partição é adicionada à direita? O particionamento por nome de cliente é prático no Sql Server.
O particionamento de tabela no SQL Server é fundamentalmente particionamento de intervalo. Ainda é possível particionar por limites de valor exatos (particionamento de lista), mas, sem uma restrição de verificação ou restrição de chave estrangeira, esteja ciente de que nada impedirá a inserção de um valor que não corresponda exatamente a um limite existente.
Pode-se adicionar um novo limite com uma função de partição,
SPLIT
mas há considerações. Uma recomendação geral é evitar a divisão de uma partição não vazia para evitar movimentação excessiva de dados e registro. No entanto, isso não é uma consideração com o particionamento de lista, pois nenhuma linha precisará ser movida para a nova partição, supondo que ainda não existam linhas para o novo identificador de cliente.SPLIT
é uma operação off-line devido ao bloqueio SCH-M, portanto, deve ser planejada fora do horário de pico. A duração será curta enquanto existir um índice com identificador de cliente como a coluna chave mais à esquerda. Caso contrário, o SQL Server precisará verificar a partição que está sendo dividida para localizar quaisquer linhas que precisem ser movidas para a nova partição (mesmo que nenhuma exista neste caso).Nível de partição
TRUNCATE
eSWITCH
pode ser usado como um meio de restaurar clientes individuais, mas lembre-se de que é uma operação offline, embora geralmente rápida.Abaixo estão exemplos de T-SQL.