Modificar uma função de partição

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Você pode alterar o modo como uma tabela ou um índice é particionado no SQL Server, no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure adicionando ou subtraindo o número de partições especificadas, em incrementos de 1, na função de partição da tabela ou do índice particionado usando Transact-SQL. Ao adicionar uma partição, você “divide” em duas uma partição existente e redefine os limites das novas partições. Ao descartar uma partição, você "funde" os limites das duas partições criando uma só. Esta última ação repopula uma partição e deixa a outra partição não atribuída. Examine as melhores práticas antes de modificar uma função de partição.

Cuidado

Mais de uma tabela ou índice podem usar a mesma função de partição. Quando modifica uma função de partição, você afeta todas elas em uma única transação. Verifique as dependências da função de partição antes de modificá-la.

O particionamento de tabela também está disponível em pools de SQL dedicados no Azure Synapse Analytics, com algumas diferenças de sintaxe. Saiba mais em Como particionar tabelas no pool de SQL dedicado.

Limitações

  • ALTER PARTITION FUNCTION só pode ser usada para dividir uma partição em duas ou para mesclar duas partições em uma. Para alterar a forma como uma tabela ou índice é particionado (por exemplo, de 10 partições em 5), você pode usar qualquer uma das opções a seguir.

    • 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 Transact-SQL INSERT INTO... SELECT FROM ou o Assistente para Gerenciar Partição no SQL Server Management Studio (SSMS).

    • Crie um índice clusterizado particionado em um heap.

      Observaçã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.

  • O mecanismo de banco de dados não oferece suporte de replicação para modificar uma função de partição. Se você quiser fazer alterações em uma função de partição no banco de dados de publicação, será preciso fazê-las manualmente no banco de dados de assinatura.

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

Permissões

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

  • Permissão ALTER ANY DATASPACE. 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.

Consultar objetos particionados em um banco de dados

A consulta a seguir lista todos os objetos particionados em um banco de dados. Isso pode ser usado para verificar as dependências de uma função de partição antes de modificá-la.

SELECT 
	PF.name AS PartitionFunction,
	ds.name AS PartitionScheme,
    OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
	OBJECT_NAME(si.object_id) AS PartitionedTable, 
	si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
	ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
	ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
	ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;

Dividir uma partição com Transact-SQL

  1. Conecte-se ao banco de dados de destino no Pesquisador de Objetos.

  2. Na barra Padrão, selecione Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    Neste exemplo:

    • Verifica se há uma versão anterior da função de partição myRangePF1 e a exclui se for encontrada.
    • Cria uma função de partição chamada myRangePF1 que particiona uma tabela em quatro partições.
    • Divide a partição entre os boundary_values 100 e 1000 para criar uma partição entre os boundary_values 100 e 500 e uma partição entre os boundary_values 500 e 1000.
    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  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    SPLIT RANGE (500);  
    

Mesclar duas partições com Transact-SQL

  1. Conecte-se ao banco de dados de destino no Pesquisador de Objetos.

  2. Na barra Padrão, selecione Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar.

    Neste exemplo:

    • Verifica se há uma versão anterior da função de partição myRangePF1 e a exclui se for encontrada.
    • Cria uma função de partição chamada myRangePF1 com três valores de marco de delimitação, que resultará em quatro partições.
    • Mescla a partição entre os boundary_values 1 e 100 com a partição entre os boundary_values 100 e 1.000.
    • Isso resulta na função de partição myRangePF1com dois pontos de marco de delimitação, 1 e 1.000.
    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  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    MERGE RANGE (100);  
    

Excluir uma função de partição com SSMS

  1. Conecte-se ao banco de dados de destino no Pesquisador de Objetos.

  2. Expanda o banco de dados no qual você deseja excluir a função de partição e expanda a pasta Repositório.

  3. Expanda a pasta Funções de partição.

  4. Clique com o botão direito do mouse na função de partição a ser excluída e selecione Excluir.

  5. Na caixa de diálogo Excluir Objeto, verifique se a função de partição correta está selecionada e selecione OK.

Próximas etapas

Saiba mais sobre conceitos relacionados nos seguintes artigos: