CREATE PARTITION SCHEME (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

パーティション テーブルまたはパーティション インデックスのパーティションを 1 つまたは複数のファイル グループにマップする構成を、現在のデータベース内に作成します。 テーブルまたはインデックスの行をパーティションにマップする値は、パーティション関数で指定されます。 パーティション構成を作成する前に、まず CREATE PARTITION FUNCTION ステートメントでパーティション関数を作成しておく必要があります。

注意

Azure SQL Database では、プライマリ ファイル グループのみがサポートされています。 ファイル グループとパーティション分割戦略の詳細については、「ファイル グループ」を参照してください。

Transact-SQL 構文表記規則

構文

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

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

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 つだけです。 パーティションは、パーティション 1 から始まり、[ ,...n] で一覧表示されているファイル グループの順序で、ファイル グループに割り当てられます。 [ ,...n] では、同じ file_group_name を複数回指定できます。 npartition_function_name で指定されたパーティションの数を保持するのに十分ではない場合、CREATE PARTITION SCHEME は失敗し、エラーが発生します。

partition_function_name によって生成されるパーティションの数がファイル グループより少ない場合、割り当てられていない最初のファイル グループが NEXT USED とマークされ、情報メッセージに NEXT USED ファイル グループの名前が表示されます。 ALL を指定した場合、唯一の file_group_name に、この partition_function_name に対する NEXT USED プロパティが保持されます。 ALTER PARTITION FUNCTION ステートメントで追加のパーティションを作成した場合は、NEXT USED ファイル グループがそのパーティションを受け取ります。 追加の割り当てられていないファイル グループを作成して新しいパーティションを保持するには、ALTER PARTITION SCHEME を使用します。

file_group_name [ ,...n] でプライマリ ファイル グループを指定するときは、PRIMARY を [PRIMARY] のように区切る必要があります。これは、PRIMARY がキーワードであるためです。

SQL Database では PRIMARY のみサポートされます。 以下の例を参照してください。

アクセス許可

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);  

パーティション分割列 col1 でパーティション関数 myRangePF1 を使用するテーブルのパーティションは、次の表に示すように割り当てられます。

[ファイル グループ] 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 );  

パーティション分割列 col1 でパーティション関数 myRangePF2 を使用するテーブルのパーティションは、次の表に示すように割り当てられます。

[ファイル グループ] 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)  

このステートメントを実行すると、次のメッセージが返されます。

パーティション構成 'myRangePS4' が正しく作成されました。 'test5fg' は、パーティション構成 '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] );  

次のステップ

テーブルのパーティション分割と関連する概念の詳細については、次の記事を参照してください。