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 relative alla sintassi Transact-SQL
Sintassi
CREATE PARTITION SCHEME partition_scheme_name
AS PARTITION partition_function_name
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )
[ ; ]
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: