Partilhar via


Modificar uma função de partição

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

Você pode alterar a maneira como uma tabela ou índice é particionado no SQL Server, no Banco de Dados SQL do Azure e na Instância Gerenciada 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 índice particionado usando Transact-SQL. Quando adiciona uma partição, fá-lo "dividindo" uma partição existente em duas partições e redefinindo os limites das novas partições. Quando tu eliminas uma partição, fazes isso unificando os limites de duas partições em uma. Esta última ação preenche novamente uma partição e deixa a outra partição não atribuída. Analise práticas recomendadas antes de modificar uma função de partição.

Atenção

Mais de uma tabela ou índice pode usar a mesma função de partição. Quando você 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 tabelas também está disponível em pools SQL dedicados no Azure Synapse Analytics, com algumas diferenças de sintaxe. Saiba mais em Particionamento de tabelas no pool SQL dedicado.

Limitações

  • ALTER PARTITION FUNCTION só pode ser usado 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 (de 10 partições para 5, por exemplo), pode utilizar qualquer uma das seguintes opções:

    • Crie uma nova tabela particionada com a função de partição desejada e, depois, insira os dados da tabela antiga na nova tabela usando a instrução INSERT INTO ... SELECT FROM Transact-SQL ou pelo Assistente para Gerenciar Partições no SQL Server Management Studio (SSMS).

    • Crie um índice clusterizado particionado num heap.

      Observação

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

    • Remova 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.

  • O mecanismo de banco de dados não fornece suporte à replicação para modificar uma função de partição. Se desejar fazer alterações em uma função de partição no banco de dados de publicação, faça isso manualmente no banco de dados de assinatura.

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

Permissões

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

  • Permissão de "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.

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. No Pesquisador de Objetos, conecte-se ao banco de dados de destino.

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

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

    Este 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 boundary_values 100 e 1000 para criar uma partição entre boundary_values 100 e 500 e uma partição entre 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. No Pesquisador de Objetos, conecte-se ao banco de dados de destino.

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

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

    Este exemplo:

    • Verifica se existe uma versão anterior da função de partição myRangePF1 e exclui-a se for encontrada.
    • Cria uma função de partição chamada myRangePF1 com três valores de limite, que resultarão em quatro partições.
    • Mescla a partição entre boundary_values 1 e 100 com a partição entre boundary_values 100 e 1.000.
    • Isso resulta na função de partição myRangePF1 ter dois pontos de fronteira, 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 o SSMS

  1. No Pesquisador de Objetos, conecte-se ao banco de dados de destino.

  2. Expanda o banco de dados onde você deseja excluir a função de partição e, em seguida, expanda a pasta Storage.

  3. Expanda a pasta Partition Functions.

  4. Clique com o botão direito do rato na função de partição que pretende eliminar e selecione Eliminar.

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

Próximos passos

Saiba mais sobre conceitos relacionados nos seguintes artigos: