CREATE PARTITION SCHEME (Transact-SQL)
Si applica a:SQL ServerDatabase SQL di AzureIstanza 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 utilizzando 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. Una singola partizione non può contenere filegroup FILESTREAM e non FILESTREAM.
ALL
Specifica che tutte le partizioni eseguono il mapping al filegroup fornito in file_group_nameo 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>]
. La stessa file_group_name può essere specificata più volte in [, ...<n>]
. Se n non è sufficiente contenere il numero di partizioni specificate in partition_function_name, CREATE PARTITION SCHEME
ha esito negativo con un errore.
Se partition_function_name genera meno partizioni rispetto ai filegroup, il primo filegroup non assegnato viene contrassegnato NEXT USED
e viene visualizzato un messaggio informativo che indica la denominazione del filegroup NEXT USED
. Se si specifica ALL
, l'unica file_group_name mantiene la proprietà NEXT USED
per questa partition_function_name. Il filegroup NEXT USED
riceve una partizione aggiuntiva se ne viene creata una in un'istruzione ALTER PARTITION FUNCTION
. Per creare più filegroup non assegnati per contenere nuove partizioni, usare ALTER PARTITION SCHEME
.
Quando si specifica il filegroup primario in <file_group_name> [, ...<n>]
, PRIMARY
deve essere delimitato, come in [PRIMARY]
, perché si tratta di una parola chiave.
Solo PRIMARY
è supportato per il database SQL. Vedere esempio E.
Autorizzazioni
Per eseguire CREATE PARTITION SCHEME
è possibile 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 .CONTROL
oALTER
autorizzazione per il database in cui viene creato lo schema di partizione.CONTROL SERVER
oALTER ANY DATABASE
autorizzazione per il server del database in cui viene creato lo schema di partizione.
Esempi
R. Creare uno schema di partizione che esegue il mapping di ogni partizione 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 utilizza la funzione di partizione myRangePF1
nella colonna di partizionamento col1
verrebbero 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. Creare uno schema di partizione che esegue il mapping di più partizioni allo stesso filegroup
Se tutte le partizioni eseguono 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 utilizza la funzione di partizione myRangePF2
nella colonna di partizionamento col1
verrebbero 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. Creare 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. Creare uno schema di partizione che specifica un filegroup NEXT USED
Nell'esempio seguente viene creata la stessa funzione di partizione degli esempi precedenti. Crea anche uno schema di partizione che elenca più filegroup rispetto a quelle 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.
Partition scheme 'myRangePS4' has been created successfully. 'test5fg' is marked as the next used filegroup in partition scheme 'myRangePS4'.
Se la funzione di partizione myRangePF4
viene modificata in modo da aggiungere una partizione, il filegroup test5fg
riceverà la nuova partizione creata.
E. Creare uno schema di partizione solo in PRIMARY
Nel database SQL di Azure l'aggiunta di file e gruppi di file non è supportata, ma il partizionamento delle tabelle è supportato dal partizionamento solo tra i 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]);