ALTER PARTITION FUNCTION (Transact-SQL)

Altera uma função de partição dividindo ou mesclando seus valores de limite. Ao executar ALTER PARTITION FUNCTION, uma partição de qualquer tabela ou índice que usa a função de partição pode ser dividida em duas partições, ou duas partições podem ser mescladas em uma única partição.

Observação sobre cuidadosCuidado

Mais de uma tabela ou índice podem usar a mesma função de partição. ALTER PARTITION FUNCTION afeta todos em uma única transação.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

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

  • SPLIT RANGE ( boundary_value )
    Adiciona uma partição à função de partição. boundary_value determina o intervalo da nova partição e deve ser diferente dos intervalos de limite existentes da função de partição. Com base em boundary_value, o Mecanismo de Banco de Dados divide um dos intervalos existentes em dois. Desses dois, aquele em que o novo boundary_value reside é considerado a nova partição.

    Um grupo de arquivos deve existir online e ser marcado pelo esquema de partição que usa a função de partição como NEXT USED para reter a nova partição. Os grupos de arquivos são alocados em partições em uma instrução CREATE PARTITION SCHEME. Se uma instrução CREATE PARTITION SCHEME alocar mais grupos de arquivos que o necessário (são criadas menos partições na instrução CREATE PARTITION FUNCTION do que grupos de arquivos para retê-las), haverá grupos de arquivos não atribuídos e um deles será marcado como NEXT USED pelo esquema de partição. Esse grupo de arquivos irá reter a nova partição. Se não houver nenhum grupo de arquivos marcado como NEXT USED pelo esquema de partição, será necessário usar ALTER PARTITION SCHEME para adicionar um grupo de arquivos, ou designar um existente, para reter a nova partição. Um grupo de arquivos que já retém partições pode ser designado para reter partições adicionais. Como uma função de partição pode participar de mais de um esquema de partição, todos os esquemas de partição que usarem a função de partição à qual você está adicionando as partições deverão ter um grupo de arquivos NEXT USED. Caso contrário, ALTER PARTITION FUNCTION falhará com um erro que exibe o esquema ou os esquemas de partição que não possuem um grupo de arquivos NEXT USED.

    Se você criar todas as partições no mesmo grupo de arquivos, esse grupo de arquivos será inicialmente designado a ser o grupo de arquivos NEXT USED automaticamente. Entretanto, após a execução de uma operação de divisão, não existe mais um grupo de arquivos NEXT USED designado. Você deve atribuir explicitamente o NEXT USED como grupo de arquivos usando ALTER PARITION SCHEME; caso contrário, uma operação de divisão subsequente falhará.

  • MERGE [ RANGE ( boundary_value) ]
    Descarta uma partição e mescla os valores que existirem na partição em uma das partições restantes. RANGE (boundary_value) deve ser um valor de limite existente no qual são mesclados os valores da partição descartada. O grupo de arquivos que originalmente mantinha o boundary_value é removido do esquema de partição a menos que seja usado por uma partição restante ou seja marcado com a propriedade NEXT USED. A partição mesclada reside no grupo de arquivos que originalmente não mantinha o boundary_value. boundary_value é uma expressão constante que pode referenciar variáveis (incluindo variáveis do tipo definido pelo usuário) ou funções (incluindo funções definidas pelo usuário). Não pode referenciar uma expressão Transact-SQL. boundary_value deve corresponder ou ser implicitamente convertido no tipo de dados de sua coluna de particionamento correspondente e não pode ser truncado durante a conversão implícita de forma que o tamanho e a escala do valor não sejam equivalentes ao seu input_parameter_type correspondente.

Práticas recomendadas

Mantenha sempre partições vazias em ambas as extremidades do intervalo de partições para garantir que a divisão de partições (antes do carregamento de novos dados) e a mesclagem de partições (após a descarga de dados antigos) não incorram a movimentação de dados. Evite dividir ou mesclar partições populadas. Isso pode ser extremamente ineficiente, pois pode causar até quatro vezes mais geração de logs e também pode causar um bloqueio grave

Limitações e restrições

ALTER PARTITION FUNCTION reparticiona quaisquer tabelas e índices que usam a função em uma única operação atômica. Entretanto, essa operação acontece offline e, dependendo da extensão de reparticionamento, pode utilizar muitos recursos.

ALTER PARTITION FUNCTION só pode ser usada para dividir uma partição em duas ou mesclar duas partições em uma. Para alterar a forma como uma tabela é particionada (por exemplo, de 10 partições em 5), execute qualquer uma das opções a seguir. Dependendo da configuração do sistema, essas opções podem variar em consumo de recursos:

  • Crie uma nova tabela particionada com a função de partição desejada e insira os dados da tabela antiga na nova tabela, usando uma instrução INSERT INTO...SELECT FROM.

  • Crie um índice clusterizado particionado em um heap.

    ObservaçãoObservação

    Descartando resultados de um índice clusterizado particionado em um heap particionado.

  • Descarte e recrie 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 que são afetados por ALTER PARTITION FUNCTION devem estar online.

ALTER PARTITION FUNCTION falha quando há um índice clusterizado desabilitado em qualquer tabela que usa a função de partição.

SQL Server não fornece suporte de replicação para modificar uma função de partição. As alterações em uma função de partição no banco de dados de publicação devem ser aplicadas manualmente no banco de dados de assinatura.

Permissões

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

  • Permissão ALTER PARTITION FUNCTION. Essa permissão tem como padrão os membros da função de servidor fixa sysadmin e das funções de banco de dados fixas db_owner e db_ddladmin.

  • A permissão CONTROL ou ALTER no banco de dados no qual a função de partição foi criada.

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

Exemplos

A. Dividindo 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. Mesclando duas partições de uma tabela particionada em uma partição

O exemplo a seguir cria a mesma função de partição anterior e mescla duas partições em uma, para um total de 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);