Condividi tramite


ALTER PARTITION FUNCTION (Transact-SQL)

Modifica una funzione di partizione mediante la suddivisione o l'unione dei relativi valori limite. Se si esegue ALTER PARTITION FUNCTION, una partizione di una tabella o un indice qualsiasi che utilizza la funzione di partizione può essere suddivisa in due partizioni oppure due partizioni possono essere unite in un'unica partizione.

Nota di attenzioneAttenzione

La stessa funzione di partizione può essere utilizzata da più tabelle o indici. L'istruzione ALTER PARTITION FUNCTION viene applicata a tutti gli elementi in un'unica transazione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • partition_function_name
    Nome della funzione di partizione da modificare.

  • SPLIT RANGE ( boundary_value )
    Aggiunge una partizione alla funzione di partizione. boundary_value determina l'intervallo della nuova partizione e deve essere diverso dagli intervalli limite esistenti della funzione di partizione. In base a boundary_value, Motore di database suddividerà uno degli intervalli esistenti. L'intervallo in cui si trova il nuovo valore definito da boundary_value verrà considerato la nuova partizione.

    Nota importanteImportante

    È necessario che un filegroup esista in linea e sia contrassegnato dallo schema di partizione che utilizza la funzione di partizione come NEXT USED affinché possa contenere la nuova partizione. Per allocare i filegroup alle partizioni è necessario utilizzare un'istruzione CREATE PARTITION SCHEME. Se un'istruzione CREATE PARTITION SCHEME alloca un numero di filegroup maggiore del necessario, ovvero l'istruzione CREATE PARTITION FUNCTION crea un numero di partizioni inferiore rispetto al numero di filegroup disponibili, saranno presenti filegroup non assegnati e quello che verrà contrassegnato come NEXT USED dallo schema di partizione conterrà la nuova partizione. Se non sono presenti filegroup contrassegnati come NEXT USED dallo schema di partizione, è necessario utilizzare l'istruzione ALTER PARTITION SCHEME per aggiungere un filegroup oppure per designarne uno esistente per contenere la nuova partizione. Un filegroup che già include partizioni può essere configurato in modo da contenere partizioni aggiuntive. Poiché una funzione di partizione può essere inclusa in più schemi di partizione, tutti gli schemi di partizione che utilizzano tale funzione di partizione a cui si sta aggiungendo partizioni devono disporre di un filegroup NEXT USED. In caso contrario, l'istruzione ALTER PARTITION FUNCTION avrà esito negativo e restituirà un errore indicante che lo schema o gli schemi di partizione non dispongono di un filegroup NEXT USED.

  • MERGE [ RANGE ( boundary_value) ]
    Elimina una partizione e unisce i valori esistenti in tale partizione in una delle rimanenti partizioni. RANGE (boundary_value) deve essere un valore limite esistente nel quale verranno uniti i valori della partizione eliminata. Il filegroup che originariamente contiene boundary_value viene rimosso dallo schema di partizione a meno che non sia utilizzato da una partizione rimanente oppure non sia contrassegnato tramite la proprietà NEXT USED. La partizione unita si trova nel filegroup che originariamente non includeva boundary_value. boundary_value è un'espressione costante che può fare riferimento a variabili, comprese le variabili con tipo definito dall'utente, oppure funzioni, comprese le funzioni definite dall'utente. Non potrà invece fare riferimento a un'espressione Transact-SQL. boundary_value deve corrispondere a oppure supportare la conversione implicita nel tipo di dati della relativa colonna di partizionamento corrispondente e non può essere troncato durante la conversione implicita in modo tale che la dimensione o la scala del valore non corrisponda a quella del relativo valore corrispondente di input_parameter_type.

Osservazioni

ALTER PARTITION FUNCTION rieseguirà il partizionamento di qualsiasi tabella e indice che utilizza la funzione in una singola operazione atomica. Questa operazione si verifica tuttavia in modalità non in linea e, in base all'estensione del ripartizionamento, potrebbe richiedere un numero elevato di risorse.

L'istruzione ALTER PARTITION FUNCTION può essere utilizzata solo per la suddivisione di una partizione oppure per l'unione di due partizioni. Per modificare il modo in cui una tabella viene partizionata, ad esempio da 10 a 5 partizioni, è possibile avvalersi di una delle opzioni seguenti. In base alla configurazione del sistema, l'utilizzo delle risorse varia in base all'opzione adottata.

  • Creare una nuova tabella partizionata utilizzando la funzione di partizione desiderata e quindi inserire i dati della vecchia tabella in quella nuova utilizzando un'istruzione INSERT INTO...SELECT FROM.

  • Creazione di un indice cluster partizionato su un heap.

    [!NOTA]

    L'eliminazione di un indice cluster partizionato ha come risultato un heap partizionato.

  • Eliminazione e ricostruzione di un indice partizionato esistente mediante l'utilizzo dell'istruzione Transact-SQL CREATE INDEX con la clausola DROP EXISTING = ON.

  • Esecuzione di una sequenza di istruzioni ALTER PARTITION FUNCTION.

Tutti i filegroup interessati dall'istruzione ALTER PARTITION FUNCTION devono essere in linea.

L'istruzione ALTER PARTITION FUNCTION ha esito negativo in presenza di un indice cluster disattivato sulle tabelle che utilizzano la funzione di partizione.

SQL Server 2008 non fornisce il supporto di replica per la modifica di una funzione di partizione. Le modifiche a una funzione di partizione nel database di pubblicazione deve essere applicato manualmente nel database di sottoscrizione.

Autorizzazioni

Per eseguire l'istruzione ALTER PARTITION FUNCTION, è necessario utilizzare le autorizzazioni seguenti:

  • Autorizzazione ALTER ANY DATASPACE. Questa autorizzazione viene concessa per impostazione predefinita al ruolo predefinito del server sysadmin e ai ruoli predefiniti del database db_owner e db_ddladmin.

  • Autorizzazione CONTROL o ALTER per il database nel quale viene creata la funzione di partizione.

  • Autorizzazione CONTROL SERVER o ALTER ANY DATABASE per il server del database nel quale viene creata la funzione di partizione.

Esempi

A. Suddivisione in due partizioni di una partizione di una tabella o un indice partizionato

Nell'esempio seguente viene creata una funzione di partizione per eseguire il partizionamento di una tabella o un indice in quattro partizioni. ALTER PARTITION FUNCTION suddivide in due una delle partizioni per creare un totale di cinque partizioni.

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. Unione di due partizioni di una tabella partizionata

Nell'esempio seguente viene creata la stessa funzione di partizione dell'esempio precedente e quindi due partizioni vengono unite in modo da formare un totale di tre partizioni.

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);