CREATE PARTITION SCHEME (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure

Crea uno schema nel database corrente che esegue il mapping delle partizioni di una tabella o un indice partizionato a uno o più filegroup. I valori per il mapping delle righe di una tabella o di un indice alle partizioni sono specificati in una funzione di partizione. Prima di creare uno schema di partizione è necessario creare una funzione di partizione in un'istruzione CREATE PARTITION FUNCTION.

Nota

Nel database SQL di Azure sono supportati solo i filegroup primari. Per altre informazioni sui filegroup e sulle strategie di partizionamento, vedere Filegroup.

Convenzioni di sintassi Transact-SQL

Sintassi

CREATE PARTITION SCHEME partition_scheme_name  
AS PARTITION partition_function_name  
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )  
[ ; ]  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

partition_scheme_name
Nome dello schema di partizione. I nomi degli schemi di partizione devono essere univoci all'interno del database e conformi alle regole per gli identificatori.

partition_function_name
Nome della funzione di partizione che usano lo schema di partizione. Sulle partizioni create dalla funzione di partizione viene eseguito il mapping ai filegroup specificati nello schema di partizione. partition_function_name deve essere già presente nel database. In una singola partizione non possono essere presenti sia filegroup FILESTREAM che filegroup non FILESTREAM.

ALL
Specifica che viene eseguito il mapping di tutte le partizioni al filegroup specificato in file_group_name o al filegroup primario se viene specificato [PRIMARY]. Se si specifica ALL, è possibile specificare un solo file_group_name.

file_group_name | [ PRIMARY ] [ ,...n]
Specifica i nomi dei filegroup che conterranno le partizioni specificate da partition_function_name. file_group_name deve essere già presente nel database.

Se si specifica [PRIMARY], la partizione viene archiviata nel filegroup primario. Se si specifica ALL, è possibile specificare un solo file_group_name. Le partizioni vengono assegnate ai filegroup a partire dalla partizione 1, nell'ordine in cui i filegroup sono elencati in [ ,...n]. È possibile specificare lo stesso file_group_name più volte in [ ,...n]. Se il valore specificato per n non è sufficiente per contenere il numero di partizioni specificate in partition_function_name, l'istruzione CREATE PARTITION SCHEME ha esito negativo e restituisce un errore.

Se partition_function_name genera un numero di partizioni inferiore ai filegroup disponibili, il primo filegroup non assegnato viene contrassegnato come NEXT USED e viene visualizzato un messaggio informativo indicante il filegroup NEXT USED. Se si specifica ALL, solo file_group_name manterrà la proprietà NEXT USED per partition_function_name. Il filegroup NEXT USED riceverà una partizione aggiuntiva se ne viene creata una in un'istruzione ALTER PARTITION FUNCTION. Per creare filegroup non assegnati aggiuntivi per contenere le nuove partizioni, usare ALTER PARTITION SCHEME.

Quando si specifica il filegroup primario in file_group_name [ ,...n], è necessario delimitare PRIMARY, ad esempio [PRIMARY] perché è una parola chiave.

Database SQL supporta solo PRIMARY. Vedi l'esempio seguente.

Autorizzazioni

Per eseguire l'istruzione CREATE PARTITION SCHEME, è necessario usare 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 creato lo schema di partizione.
  • Autorizzazione CONTROL SERVER o ALTER ANY DATABASE per il server del database nel quale viene creato lo schema di partizione.

Esempi

R. Creazione di uno schema di partizione che esegue il mapping delle singole partizioni a un filegroup diverso

Nell'esempio seguente viene creata una funzione di partizione per suddividere una tabella o indice in quattro partizioni. Viene quindi creato uno schema di partizione che definisce i filegroup in cui archiviare le quattro partizioni. Nell'esempio si presuppone che i filegroup esistano già nel database.

CREATE PARTITION FUNCTION myRangePF1 (INT)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  
GO  
CREATE PARTITION SCHEME myRangePS1  
AS PARTITION myRangePF1  
TO (test1fg, test2fg, test3fg, test4fg);  

Le partizioni di una tabella che usa la funzione di partizione myRangePF1 nella colonna di partizionamento col1 vengono assegnate come illustrato nella tabella seguente.

Filegroup Partizione Valori
test1fg 1 col1<= 1
test2fg 2 col1>1 AND col1<= 100
test3fg 3 col1>100 AND col1<= 1000
test4fg 4 col1>1000

B. Creazione di uno schema di partizione che esegue il mapping di più partizioni allo stesso filegroup

Se su tutte le partizioni viene eseguito il mapping allo stesso filegroup, usare la parola chiave ALL. Se su più partizioni, ma non su tutte, viene eseguito il mapping allo stesso filegroup, sarà tuttavia necessario ripetere il nome del filegroup come illustrato nell'esempio seguente.

CREATE PARTITION FUNCTION myRangePF2 (INT)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  
GO  
CREATE PARTITION SCHEME myRangePS2  
AS PARTITION myRangePF2  
TO ( test1fg, test1fg, test1fg, test2fg );  

Le partizioni di una tabella che usa la funzione di partizione myRangePF2 nella colonna di partizionamento col1 vengono assegnate come illustrato nella tabella seguente.

Filegroup Partizione Valori
test1fg 1 col1<= 1
test1fg 2 col1>1 AND col1<= 100
test1fg 3 col1>100 AND col1<= 1000
test2fg 4 col1>1000

C. Creazione di uno schema di partizione che esegue il mapping di tutte le partizioni allo stesso filegroup

Nell'esempio seguente viene creata la stessa funzione di partizione dell'esempio precedente, ma viene creato uno schema di partizione che mappa tutte le partizioni allo stesso filegroup.

CREATE PARTITION FUNCTION myRangePF3 (INT)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  
GO  
CREATE PARTITION SCHEME myRangePS3  
AS PARTITION myRangePF3  
ALL TO ( test1fg );  

D. Creazione di uno schema di partizione che specifica un filegroup 'NEXT USED

Nell'esempio seguente viene creata la stessa funzione di partizione dell'esempio precedente, ma viene creato uno schema di partizione in cui è elencato un numero di filegroup maggiore delle partizioni create dalla funzione di partizione associata.

CREATE PARTITION FUNCTION myRangePF4 (INT)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  
GO  
CREATE PARTITION SCHEME myRangePS4  
AS PARTITION myRangePF4  
TO (test1fg, test2fg, test3fg, test4fg, test5fg)  

L'esecuzione dell'istruzione restituisce il messaggio seguente.

Lo schema di partizione "myRangePS4" è stato creato. "test5fg" viene contrassegnato come il filegroup successivo usato nello schema di partizione "myRangePS4".

Se la funzione di partizione myRangePF4 viene modificata in modo da aggiungere una partizione, il filegroup test5fg riceverà la nuova partizione creata.

E. Creazione di uno schema di partizione solo in PRIMARY

In Database SQL di Azure l'aggiunta di file e gruppi di file non è supportata, mentre il partizionamento delle tabelle è supportato tramite il partizionamento solo del filegroup PRIMARY.

Nell'esempio seguente viene creata una funzione di partizione per suddividere una tabella o indice in quattro partizioni. Viene quindi creato uno schema di partizione che specifica che tutte le partizioni vengono create nel filegroup PRIMARY.

CREATE PARTITION FUNCTION myRangePF1 (INT)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  
GO  
CREATE PARTITION SCHEME myRangePS1  
AS PARTITION myRangePF1  
ALL TO ( [PRIMARY] );  

Passaggi successivi

Per altre informazioni sul partizionamento delle tabelle e sui concetti correlati, vedere gli articoli seguenti: