Partilhar via


ALTERAR FUNÇÃO DE PARTIÇÃO (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Altera uma função de partição ao dividir ou fundir os seus valores de fronteira. Executar uma instrução ALTER PARTITION FUNCTION pode dividir uma tabela ou partição de índice que usa a função de partição em duas partições. A instrução também pode fundir duas partições numa só partição.

Atenção

Mais de uma tabela ou índice pode usar a mesma função de partição. ALTERAR A FUNÇÃO DE PARTIÇÃO afeta todos numa única transação.

Transact-SQL convenções de sintaxe

Sintaxe

  
ALTER PARTITION FUNCTION partition_function_name()  
{   
    SPLIT RANGE ( boundary_value )  
  | MERGE RANGE ( boundary_value )   
} [ ; ]  

Arguments

partition_function_name
É o nome da função de partição a ser modificada.

GAMA DIVIDIDA ( boundary_value )
Adiciona uma partição à função de partição. boundary_value determina o intervalo da nova partição e deve diferir dos intervalos de fronteira existentes da função de partição. Com base em boundary_value, o motor de base de dados divide um dos intervalos existentes em dois. Destas duas faixas, a que tem a nova boundary_value é a nova partição.

Um grupo de ficheiros deve existir online. E, o esquema de partição que utiliza a função de partição como NEXT USED para guardar a nova partição deve marcar o grupo de ficheiros. Uma instrução CREATE PARTITION SCHEME atribui grupos de ficheiros às partições. A instrução CREATE PARTITION FUNCTION cria menos partições do que grupos de ficheiros para as armazenar. Uma instrução CREATE PARTITION SCHEME pode reservar mais grupos de ficheiros do que o necessário. Se isso acontecer, vais acabar com grupos de ficheiros não atribuídos. Além disso, o esquema de partições marca um dos grupos de ficheiros como PRÓXIMO UTILIZADO. Este grupo de ficheiros contém a nova partição. Se não existirem grupos de ficheiros que o esquema de partição marca como NEXT USED, deve usar uma instrução ALTERAR PARTITION SCHEME.

A instrução ALTER PARTITION SCHEME pode adicionar um grupo de ficheiros ou selecionar um existente para manter a nova partição. Podes atribuir um grupo de ficheiros que já guarda partições para guardar partições adicionais. Uma função de partição pode participar em mais do que um esquema de partição. Por esta razão, todos os esquemas de partição que usam a função de partição à qual estás a adicionar partições devem ter um grupo de ficheiros NEXT USED. Caso contrário, a instrução ALTER PARTITION FUNCTION falha com um erro que mostra o esquema de partição ou esquemas que não têm um grupo de ficheiros NEXT USED.

Se criares todas as partições no mesmo grupo de ficheiros, esse grupo é inicialmente atribuído automaticamente para ser o PRÓXIMO GRUPO. No entanto, após a execução de uma operação dividida, já não existe um grupo de ficheiros PRÓXIMO USADO selecionado. Atribua explicitamente o grupo de ficheiros como o PRÓXIMO GRUPO DE FICHEIROS USADO usando ALTERAR PARTITION SCHEME ou uma operação de divisão futura falhará.

Observação

Limitações com o índice de columnstore: Apenas partições vazias podem ser divididas quando existe um índice de columnstore na tabela. Terá de eliminar ou desativar o índice de colonstore antes de realizar esta operação.

FUSÃO [ ALCANCE ( boundary_value) ]
Elimina uma partição e funde quaisquer valores existentes na partição numa partição remanescente. RANGE (boundary_value) deve ser um valor de fronteira existente da partição a ser eliminada. Este argumento remove o grupo de ficheiros que originalmente detinha boundary_value do esquema de partições, a menos que uma partição restante o utilize ou o marque com a propriedade NEXT USED. A partição fundida existe no grupo de ficheiros que inicialmente não tinha boundary_value . boundary_value é uma expressão constante que pode referenciar variáveis (incluindo variáveis de tipo definidas pelo utilizador) ou funções (incluindo funções definidas pelo utilizador). Não pode fazer referência a uma expressão Transact-SQL. boundary_value deve corresponder ou ser implicitamente convertível para o tipo de dado da coluna de partição correspondente. Também não se pode truncar boundary_value durante a conversão implícita de forma a que o tamanho e a escala do valor não coincidam com os do seu input_parameter_type correspondente.

Observação

Limitações com o índice columnstore: Duas partições não vazias contendo um índice columnstore não podem ser fundidas. Terá de desligar ou desativar o índice da coluna antes de realizar esta operação

Melhores práticas

Mantenha sempre partições vazias em ambas as extremidades do intervalo de partições. Mantém as partições em ambas as extremidades para garantir que a divisão e a fusão das partições não provocam qualquer movimento de dados. A divisão das partições ocorre no início e a fusão das partições ocorre no final. Evite dividir ou fundir partições preenchidas. Dividir ou fundir partições preenchidas pode ser ineficiente. Podem ser ineficientes porque a divisão ou fusão pode causar até quatro vezes mais geração de troncos, e também causar bloqueios severos.

A principal razão para colocar as suas partições em múltiplos grupos de ficheiros é garantir que consegue realizar independentemente operações de backup e restauro nas partições. Saiba mais sobre grupos de arquivos e estratégias de particionamento em Grupos de arquivos.

Limitações e Restrições

ALTERAR FUNÇÃO DE PARTIÇÃO reparticiona quaisquer tabelas e índices que utilizem a função numa única operação atómica. No entanto, esta operação ocorre offline e, dependendo da extensão da repartição, pode ser intensiva em recursos.

Usa apenas ALTERAR PARTITION FUNCTION para dividir uma partição em duas, ou para fundir duas partições numa só. Para alterar a forma como uma tabela está de outra forma particionada (por exemplo, de 10 partições para cinco partições), exerça qualquer uma das seguintes opções. Dependendo da configuração do seu sistema, estas opções podem variar no consumo de recursos:

  • Crie uma nova tabela particionada com a função de partição necessária. Depois, insere os dados da tabela antiga na nova tabela usando um INSERT INTO... Instrução SELECT FROM.

  • Crie um índice clusterizado particionado num heap.

    Observação

    Eliminar um índice agrupado particionado resulta em um heap particionado.

  • Descarte e reconstrua um índice particionado existente usando a instrução Transact-SQL CREATE INDEX com a cláusula DROP EXISTING = ON.

  • Execute uma sequência de instruções ALTER PARTITION FUNCTION.

Todos os grupos de arquivos afetados pela ALTER PARTITION FUNCTION devem estar online.

ALTERAR A FUNÇÃO DE PARTIÇÃO falha quando existe um índice clusterizado desativado em quaisquer tabelas que utilizem a função de partição.

O motor da base de dados não fornece suporte de replicação para modificar uma função de partição. Alterações a uma função de partição na base de dados de publicações devem ser aplicadas manualmente na base de dados de subscrição.

Permissions

Qualquer uma das seguintes permissões pode ser usada para executar ALTER PARTITION FUNCTION:

  • Permissão para ALTER ANY DATASPACE. A permissão é atribuída por padrão aos membros da função de servidor fixa sysadmin e das funções de banco de dados fixas db_owner e db_ddladmin.

  • Permissão CONTROL ou ALTER na base de dados na qual a função de partição foi criada.

  • CONTROL SERVER ou permissão ALTER ANY DATABASE no servidor do banco de dados no qual a função de partição foi criada.

Examples

A. Divida uma partição de uma tabela ou índice particionado em duas partições

O exemplo a seguir cria uma função de partição para particionar uma tabela ou índice em quatro partições. ALTER PARTITION FUNCTION divide uma das partições em duas para criar um total de cinco partições.

IF EXISTS (SELECT * FROM sys.partition_functions  
    WHERE name = 'myRangePF1')  
DROP PARTITION FUNCTION myRangePF1;  
GO  
CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
GO  
--Split the partition between boundary_values 100 and 1000  
--to create two partitions between boundary_values 100 and 500  
--and between boundary_values 500 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
SPLIT RANGE (500);  

B. Fusão duas partições de uma tabela particionada numa só partição

O exemplo seguinte cria a mesma função de partição que foi descrita acima, e depois funde duas das partições numa só partição, totalizando três partições.

IF EXISTS (SELECT * FROM sys.partition_functions  
    WHERE name = 'myRangePF1')  
DROP PARTITION FUNCTION myRangePF1;  
GO  
CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
GO  
--Merge the partitions between boundary_values 1 and 100  
--and between boundary_values 100 and 1000 to create one partition  
--between boundary_values 1 and 1000.  
ALTER PARTITION FUNCTION myRangePF1 ()  
MERGE RANGE (100);  

Próximos passos

Saiba mais sobre particionamento de tabelas e conceitos relacionados nos seguintes artigos: