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.
Attenzione |
|---|
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. |
Mantenere sempre vuote le partizioni a entrambe le estremità dell'intervallo di partizione per assicurare che la suddivisione della partizione (prima di caricare nuovi dati) e l'unione della partizione (dopo aver scaricato vecchi dati) non comportino lo spostamento di dati. Evitare di suddividere o unire partizioni popolate. Questa operazione potrebbe risultare estremamente inefficiente, in quanto potrebbe causare la generazione di log quattro volte superiore, nonché un blocco grave.
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à offline 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.
NotaL'eliminazione di un indice cluster partizionato ha come risultato un heap partizionato.
Eliminazione e ricompilazione 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 online.
L'istruzione ALTER PARTITION FUNCTION ha esito negativo in presenza di un indice cluster disabilitato sulle tabelle che utilizzano la funzione di partizione.
SQL Server 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.
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 nel database in cui la funzione di partizione è stata creata.
Autorizzazione CONTROL SERVER o ALTER ANY DATABASE per il server del database nel quale viene creata la funzione di partizione.
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);
