Condividi tramite


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 USEDe 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 o ALTER autorizzazione per il database in cui viene creato lo schema di partizione.

  • CONTROL SERVER o ALTER 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]);