CREATE PARTITION SCHEME (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
パーティション テーブルまたはパーティション インデックスのパーティションを 1 つまたは複数のファイル グループにマップする構成を、現在のデータベース内に作成します。 テーブルまたはインデックスの行をパーティションにマップする値は、パーティション関数で指定されます。 パーティション構成を作成する前に、まず CREATE PARTITION FUNCTION ステートメントでパーティション関数を作成しておく必要があります。
注意
Azure SQL Database では、プライマリ ファイル グループのみがサポートされています。 ファイル グループとパーティション分割戦略の詳細については、「ファイル グループ」を参照してください。
構文
CREATE PARTITION SCHEME partition_scheme_name
AS PARTITION partition_function_name
[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ , ...n ] )
[ ; ]
引数
partition_scheme_name
パーティション構成の名前。 パーティション構成の名前は、データベース内で一意であり、かつ識別子のルールに従っている必要があります。
partition_function_name
パーティション構成を使用するパーティション関数の名前。 パーティション関数によって作成されたパーティションは、パーティション構成で指定されたファイル グループにマップされます。 partition_function_name はデータベースに既に存在する必要があります。 1 つのパーティションに FILESTREAM ファイル グループと非 FILESTREAM ファイル グループの両方を含めることはできません。
ALL
すべてのパーティションが file_group_nameで指定されたファイル グループにマップされるか、[PRIMARY]
が指定されている場合はプライマリ ファイル グループにマップされることを指定します。
ALL
を指定した場合、指定できる file_group_name は 1 つだけです。
file_group_name |[ PRIMARY ][ , ...n ]
partition_function_name によって指定されたパーティションを保持するファイル グループの名前を指定します。 file_group_name がデータベースに既に存在する必要があります。
[PRIMARY]
を指定すると、パーティションはプライマリ ファイル グループに格納されます。
ALL
を指定した場合、指定できる file_group_name は 1 つだけです。 パーティションは、ファイル グループが [, ...<n>]
に表示される順序で、パーティション 1 以降のファイル グループに割り当てられます。
[, ...<n>]
で同じ file_group_name を複数回指定できます。
partition_function_nameで指定 パーティション数を保持するのに が十分でない場合、エラー CREATE PARTITION SCHEME
失敗します。
partition_function_name で生成されるパーティション数がファイル グループよりも少ない場合、最初の未割り当てファイル グループは NEXT USED
としてマークされ、情報メッセージに NEXT USED
ファイル グループの名前が表示されます。
ALL
を指定した場合、この partition_function_nameの NEXT USED
プロパティは、唯一の file_group_name によって保持されます。
NEXT USED
ファイル グループは、ALTER PARTITION FUNCTION
ステートメントで作成された場合、追加のパーティションを受け取ります。 新しいパーティションを保持するために割り当てられていないファイル グループをさらに作成するには、ALTER PARTITION SCHEME
を使用します。
<file_group_name> [, ...<n>]
でプライマリ ファイル グループを指定する場合、PRIMARY
はキーワードであるため、[PRIMARY]
のように区切る必要があります。
SQL Database では、PRIMARY
のみがサポートされています。 E
アクセス許可
次のアクセス許可を使用して、CREATE PARTITION SCHEME
を実行できます。
ALTER ANY DATASPACE
アクセス許可。 この権限は、既定では sysadmin 固定サーバー ロール、 db_owner 固定データベース ロール、および db_ddladmin 固定データベース ロールのメンバーに与えられています。パーティション構成が作成されているデータベースに対するアクセス許可を
CONTROL
またはALTER
します。パーティション構成が作成されているデータベースのサーバーに対するアクセス許可を
CONTROL SERVER
またはALTER ANY DATABASE
します。
例
A. 各パーティションを別のファイル グループにマップするパーティション構成を作成する
次の例では、テーブルまたはインデックスを 4 つのパーティションに分割するパーティション関数を作成します。 その後、4 つのパーティションをそれぞれ保持するファイル グループを指定するパーティション構成を作成します。 この例では、ファイル グループが既にデータベースに存在していると仮定しています。
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);
パーティション分割列の myRangePF1
を使用するテーブルのパーティション col1
は、次の表に示すように割り当てられます。
[ファイル グループ] | Partition | 値 |
---|---|---|
test1fg |
1 |
col1
<= 1 |
test2fg |
2 |
col1
>
1 AND col1 <= 100 |
test3fg |
3 |
col1
>
100 AND col1 <= 1000 |
test4fg |
4 | col1 > 1000 |
B. 複数のパーティションを同じファイル グループにマップするパーティション構成を作成する
すべてのパーティションが同じファイル グループにマップされている場合は、ALL
キーワードを使用します。 ただし、複数の (すべてではない) パーティションを同じファイル グループにマップする場合は、次の例に示すように、ファイル グループ名を繰り返す必要があります。
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);
パーティション分割列の myRangePF2
を使用するテーブルのパーティション col1
は、次の表に示すように割り当てられます。
[ファイル グループ] | Partition | 値 |
---|---|---|
test1fg |
1 |
col1
<= 1 |
test1fg |
2 |
col1
>
1 AND col1 <= 100 |
test1fg |
3 |
col1
>
100 AND col1 <= 1000 |
test2fg |
4 | col1 > 1000 |
C. すべてのパーティションを同じファイル グループにマップするパーティション構成を作成する
次の例では、これまでの例と同じパーティション関数を作成し、すべてのパーティションを同じファイル グループにマップするパーティション構成を作成します。
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. NEXT USED ファイル グループを指定するパーティション構成を作成する
次の例では、前の例と同じパーティション関数を作成します。 また、関連するパーティション関数によって作成されたパーティションよりも多くのファイル グループを一覧表示するパーティション構成も作成されます。
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);
このステートメントを実行すると、次のメッセージが返されます。
Partition scheme 'myRangePS4' has been created successfully. 'test5fg' is marked as the next used filegroup in partition scheme 'myRangePS4'.
パーティション関数 myRangePF4
を変更してパーティションを追加すると、ファイル グループ test5fg
は新たに作成されたパーティションを受け取ります。
E. PRIMARY でのみパーティション構成を作成する
Azure SQL Database では、ファイルとファイル グループの追加はサポートされていませんが、テーブルのパーティション分割は、PRIMARY
ファイル グループ間でのみパーティション分割することでサポートされます。
次の例では、テーブルまたはインデックスを 4 つのパーティションに分割するパーティション関数を作成します。 その後、すべてのパーティションが 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]);