CREATE PARTITION SCHEME (Transact-SQL)CREATE PARTITION SCHEME (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

パーティション テーブルまたはパーティション インデックスのパーティションをファイル グループにマップする構成を、現在のデータベース内に作成します。Creates a scheme in the current database that maps the partitions of a partitioned table or index to filegroups. パーティション テーブルまたはパーティション インデックスのパーティションの数とドメインは、パーティション関数で決まります。The number and domain of the partitions of a partitioned table or index are determined in a partition function. パーティション構成を作成する前に、まず CREATE PARTITION FUNCTION ステートメントでパーティション関数を作成しておく必要があります。A partition function must first be created in a CREATE PARTITION FUNCTION statement before creating a partition scheme.

注意

Azure SQL Database では、プライマリ ファイル グループのみがサポートされます。In Azure SQL Database only primary filegroups are supported.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

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

引数Arguments

partition_scheme_namepartition_scheme_name
パーティション構成の名前です。Is the name of the partition scheme. パーティション構成の名前は、データベース内で一意であり、かつ識別子のルールに従っている必要があります。Partition scheme names must be unique within the database and comply with the rules for identifiers.

partition_function_namepartition_function_name
パーティション構成を使用するパーティション関数の名前です。Is the name of the partition function using the partition scheme. パーティション関数によって作成されたパーティションは、パーティション構成で指定されたファイル グループにマップされます。Partitions created by the partition function are mapped to the filegroups specified in the partition scheme. partition_function_name はデータベースに既に存在する必要があります。partition_function_name must already exist in the database. 1 つのパーティションに FILESTREAM ファイル グループと非 FILESTREAM ファイル グループの両方を含めることはできません。A single partition cannot contain both FILESTREAM and non-FILESTREAM filegroups.

ALLALL
すべてのパーティションを file_group_name で提供されるファイル グループにマップすることを指定します。 [ PRIMARY ] を指定した場合は、すべてのパーティションをプライマリ ファイル グループにマップすることを指定します。Specifies that all partitions map to the filegroup provided in file_group_name, or to the primary filegroup if [ PRIMARY ] is specified. ALL を指定した場合は、指定できる file_group_name は 1 つだけです。If ALL is specified, only one file_group_name can be specified.

file_group_name | [ PRIMARY ] [ , ...n]file_group_name | [ PRIMARY ] [ ,...n]
partition_function_name によって指定されたパーティションを保持するファイル グループの名前を指定します。Specifies the names of the filegroups to hold the partitions specified by partition_function_name. file_group_name がデータベースに既に存在する必要があります。file_group_name must already exist in the database.

[ PRIMARY ] を指定した場合、パーティションはプライマリ ファイル グループに格納されます。If [ PRIMARY ] is specified, the partition is stored on the primary filegroup. ALL を指定した場合は、指定できる file_group_name は 1 つだけです。If ALL is specified, only one file_group_name can be specified. パーティションは、パーティション 1 から始まり、[ , ...n] で一覧表示されているファイル グループの順序で、ファイル グループに割り当てられます。Partitions are assigned to filegroups, starting with partition 1, in the order in which the filegroups are listed in [,...n]. [ , ...n] では、同じ file_group_name を複数回指定できます。The same file_group_name can be specified more than one time in [,...n]. npartition_function_name で指定されたパーティションの数を保持するのに十分ではない場合、CREATE PARTITION SCHEME は失敗し、エラーが発生します。If n is not sufficient to hold the number of partitions specified in partition_function_name, CREATE PARTITION SCHEME fails with an error.

partition_function_name によって生成されるパーティションの数がファイル グループより少ない場合、割り当てられていない最初のファイル グループが NEXT USED とマークされ、情報メッセージに NEXT USED ファイル グループの名前が表示されます。If partition_function_name generates less partitions than filegroups, the first unassigned filegroup is marked NEXT USED, and an information message displays naming the NEXT USED filegroup. ALL を指定した場合、唯一の file_group_name に、この partition_function_name に対する NEXT USED プロパティが設定されます。If ALL is specified, the sole file_group_name maintains its NEXT USED property for this partition_function_name. ALTER PARTITION FUNCTION ステートメントで追加のパーティションを作成した場合は、NEXT USED ファイル グループがそのパーティションを受け取ります。The NEXT USED filegroup will receive an additional partition if one is created in an ALTER PARTITION FUNCTION statement. 追加の割り当てられていないファイル グループを作成して新しいパーティションを保持するには、ALTER PARTITION SCHEME を使用します。To create additional unassigned filegroups to hold new partitions, use ALTER PARTITION SCHEME.

file_group_name [ 1 , ...n] でプライマリ ファイル グループを指定するときは、PRIMARY を [ PRIMARY ] のように区切る必要があります。これは、PRIMARY がキーワードであるためです。When you specify the primary filegroup in file_group_name [ 1 ,...n], PRIMARY must be delimited, as in [ PRIMARY ], because it is a keyword.

SQL DatabaseSQL Database では PRIMARY のみサポートされます。Only PRIMARY is supported for SQL DatabaseSQL Database. 後半の例 E をご覧ください。See example E below.

アクセス許可Permissions

CREATE PARTITION SCHEME を実行する場合、下記の権限を使用することができます。The following permissions can be used to execute CREATE PARTITION SCHEME:

  • ALTER ANY DATASPACE 権限。ALTER ANY DATASPACE permission. この権限は、既定では sysadmin 固定サーバー ロール、 db_owner 固定データベース ロール、および db_ddladmin 固定データベース ロールのメンバーに与えられています。This permission defaults to members of the sysadmin fixed server role and the db_owner and db_ddladmin fixed database roles.

  • データベースの CONTROL 権限または ALTER 権限 (パーティション構成はこのデータベース内で作成)。CONTROL or ALTER permission on the database in which the partition scheme is being created.

  • データベースのサーバーの CONTROL SERVER 権限または ALTER ANY DATABASE 権限 (パーティション構成はこのデータベースで作成)。CONTROL SERVER or ALTER ANY DATABASE permission on the server of the database in which the partition scheme is being created.

使用例Examples

A.A. 各パーティションを異なるファイル グループにマップするパーティション構成を作成するCreating a partition scheme that maps each partition to a different filegroup

次の例では、テーブルまたはインデックスを 4 つのパーティションに分割するパーティション関数を作成します。The following example creates a partition function to partition a table or index into four partitions. その後、4 つのパーティションをそれぞれ保持するファイル グループを指定するパーティション構成を作成します。A partition scheme is then created that specifies the filegroups to hold each one of the four partitions. この例では、ファイル グループが既にデータベースに存在していると仮定しています。This example assumes the filegroups already exist in the 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);  

パーティション分割列 col1 でパーティション関数 myRangePF1 を使用するテーブルのパーティションは、次の表に示すように割り当てられます。The partitions of a table that uses partition function myRangePF1 on partitioning column col1 would be assigned as shown in the following table.

[ファイル グループ]Filegroup test1fg test2fg test3fg test4fg
パーティションPartition 11 22 33 44
Values col1 <= 1col1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1000col1 > 100 AND col1 <= 1000 col1 > 1000col1 > 1000

B.B. 複数のパーティションを同じファイル グループにマップするパーティション構成を作成するCreating a partition scheme that maps multiple partitions to the same filegroup

すべてのパーティションを同じファイル グループにマップする場合は、ALL キーワードを使用します。If all the partitions map to the same filegroup, use the ALL keyword. ただし、複数の (すべてではない) パーティションを同じファイル グループにマップする場合は、次の例に示すように、ファイル グループ名を繰り返す必要があります。But if multiple, but not all, partitions are mapped to the same filegroup, the filegroup name must be repeated, as shown in the following example.

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 を使用するテーブルのパーティションは、次の表に示すように割り当てられます。The partitions of a table that uses partition function myRangePF2 on partitioning column col1 would be assigned as shown in the following table.

[ファイル グループ]Filegroup test1fg test1fg test1fg test2fg
パーティションPartition 11 22 33 44
Values col1 <= 1col1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1000col1 > 100 AND col1 <= 1000 col1 > 1000col1 > 1000

C.C. すべてのパーティションを同じファイル グループにマップするパーティション構成を作成するCreating a partition scheme that maps all partitions to the same filegroup

次の例では、これまでの例と同じパーティション関数を作成し、すべてのパーティションを同じファイル グループにマップするパーティション構成を作成します。The following example creates the same partition function as in the previous examples, and a partition scheme is created that maps all partitions to the same 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.D. 'NEXT USED' ファイル グループを指定するパーティション構成を作成するCreating a partition scheme that specifies a 'NEXT USED' filegroup

次の例では、これまでの例と同じパーティション関数を作成し、関連するパーティション関数によって作成されるパーティションよりも多くのファイル グループを一覧するパーティション構成を作成します。The following example creates the same partition function as in the previous examples, and a partition scheme is created that lists more filegroups than there are partitions created by the associated partition function.

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)  

このステートメントを実行すると、次のメッセージが返されます。Executing the statement returns the following message.

パーティション構成 'myRangePS4' が正しく作成されました。Partition scheme 'myRangePS4' has been created successfully. 'test5fg' は、パーティション構成 'myRangePS4' で次に使用されるファイル グループに設定されています。'test5fg' is marked as the next used filegroup in partition scheme 'myRangePS4'.

パーティション関数 myRangePF4 を変更してパーティションを追加すると、ファイル グループ test5fg は新たに作成されたパーティションを受け取ります。If partition function myRangePF4 is changed to add a partition, filegroup test5fg receives the newly created partition.

E.E. PRIMARY のみでパーティション構成を作成する - PRIMARY のみが SQL DatabaseSQL Database でサポートされるCreating a partition schema only on PRIMARY - only PRIMARY is supported for SQL DatabaseSQL Database

次の例では、テーブルまたはインデックスを 4 つのパーティションに分割するパーティション関数を作成します。The following example creates a partition function to partition a table or index into four partitions. すべてのパーティションが PRIMARY ファイル グループに作成されることを指定するパーティション構成が作成されます。A partition scheme is then created that specifies that all partitions are created in the PRIMARY filegroup.

CREATE PARTITION FUNCTION myRangePF1 (int)  
AS RANGE LEFT FOR VALUES (1, 100, 1000);  
GO  
CREATE PARTITION SCHEME myRangePS1  
AS PARTITION myRangePF1  
ALL TO ( [PRIMARY] );  

参照See Also

CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
ALTER PARTITION SCHEME (Transact-SQL) ALTER PARTITION SCHEME (Transact-SQL)
DROP PARTITION SCHEME (Transact-SQL) DROP PARTITION SCHEME (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
パーティション テーブルとパーティション インデックスの作成 Create Partitioned Tables and Indexes
sys.partition_schemes (Transact-SQL) sys.partition_schemes (Transact-SQL)
sys.data_spaces (Transact-SQL) sys.data_spaces (Transact-SQL)
sys.destination_data_spaces (Transact-SQL) sys.destination_data_spaces (Transact-SQL)
sys.partitions (Transact-SQL) sys.partitions (Transact-SQL)
sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)sys.index_columns (Transact-SQL)