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

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

Создает схему в текущей базе данных, которая сопоставляет секции секционированной таблицы или индекса с файловыми группами.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.

Примечание

В базе данных SQL Azure поддерживаются только первичные файловые группы.In Azure SQL Database only primary filegroups are supported.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic 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 ] )  
[ ; ]  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

Аргументы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. Одна секция не может одновременно содержать файловые группы файлового потока и другие файловые группы.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.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.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]. Одно и то же имя file_group_name может быть указано в [ , ...n] несколько раз.The same file_group_name can be specified more than one time in [,...n]. Если значение n недостаточно для количества секций, указываемого в аргументе partition_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 сохраняет свое свойство NEXT USED для аргумента partition_function_name.If ALL is specified, the sole file_group_name maintains its NEXT USED property for this partition_function_name. Файловая группа NEXT USED получит дополнительную секцию, если такая секция будет создана инструкцией ALTER PARTITION FUNCTION.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 ] , так как это ключевое слово.When you specify the primary filegroup in file_group_name [ 1 ,...n], PRIMARY must be delimited, as in [ PRIMARY ], because it is a keyword.

Только PRIMARY поддерживается для База данных SQLSQL Database.Only PRIMARY is supported for База данных SQLSQL Database. См. пример Д далее.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

В следующем примере создается функция секционирования для разделения таблицы или индекса на четыре секции.The following example creates a partition function to partition a table or index into four partitions. Затем создается схема секционирования, которая задает файловые группы, каждая из которых должна содержать одну из четырех секций.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);  

Секции таблицы, использующей функцию секционирования myRangePF1 в столбце секционирования col1, будут назначены так, как показано в следующей таблице.The partitions of a table that uses partition function myRangePF1 on partitioning column col1 would be assigned as shown in the following table.

Файловая группаFilegroup Partition (Раздел)Partition ЗначенияValues
test1fg 11 col1 <= 1col1 <= 1
test2fg 22 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100
test3fg 33 col1 > 100 AND col1 <= 1000col1 > 100 AND col1 <= 1000
test4fg 44 col1 > 1000col1 > 1000

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

Секции таблицы, использующей функцию секционирования myRangePF2 в столбце секционирования col1, будут назначены так, как показано в следующей таблице.The partitions of a table that uses partition function myRangePF2 on partitioning column col1 would be assigned as shown in the following table.

Файловая группаFilegroup Partition (Раздел)Partition ЗначенияValues
test1fg 11 col1 <= 1col1 <= 1
test1fg 22 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100
test1fg 33 col1 > 100 AND col1 <= 1000col1 > 100 AND col1 <= 1000
test2fg 44 col1 > 1000col1 > 1000

В.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. Создание схемы секционирования, указывающей файловую группу "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. Создание схемы секционирования только в PRIMARYCreating a partition scheme only on PRIMARY

В База данных SQLSQL Database Azure добавление файлов и файловых групп не поддерживается, а секционирование таблиц поддерживается путем секционирования только по файловой группе PRIMARY.In Azure База данных SQLSQL Database, adding files and file groups is not supported, but table partitioning is supported by partitioning across only the PRIMARY filegroup.

В следующем примере создается функция секционирования для разделения таблицы или индекса на четыре секции.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)