Поделиться через


CREATE PARTITION SCHEME (Transact-SQL)

Создает схему в текущей базе данных, которая сопоставляет секции секционированной таблицы или индекса с файловыми группами. Количество и домен секций секционированной таблицы или индекса определяются в функции секционирования. Перед созданием схемы секционирования вначале в инструкции CREATE PARTITION FUNCTION должна быть создана функция секционирования.

Значок ссылки на разделСоглашения о синтаксисе в Transact-SQL

Синтаксис

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

  • ALL
    Указывает, что все секции сопоставляются с файловой группой, определяемой аргументом file_group_name, или с первичной файловой группой, если указывается [PRIMARY]. Если указывается ALL, то может быть указано только одно значение аргумента file_group_name.

  • file_group_name | [ PRIMARY ] [ ,...n]
    Указывает имена файловых групп, содержащих секции, указываемые аргументом partition_function_name. Аргумент file_group_name уже должен существовать в базе данных.

    Если указывается [PRIMARY], секция сохраняется в первичной файловой группе. Если указывается ALL, то может быть указано только одно значение аргумента file_group_name. Секции назначаются файловым группам, начиная с секции 1, в том порядке, в котором файловые группы перечисляются в [,...n]. Одно и то же имя file_group_name может быть указано в [,...n] несколько раз. Если значение n не достаточно для количества секций, указываемого в аргументе partition_function_name, CREATE PARTITION SCHEME завершается с ошибкой.

    Если аргумент partition_function_name формирует меньше секций, чем количество файловых групп, первая неназначенная файловая группа отмечается как NEXT USED и информационное сообщение выводит наименование файловой группы NEXT USED. Если указывается параметр ALL, единственный аргумент file_group_name сохраняет свое свойство NEXT USED для аргумента partition_function_name. Файловая группа NEXT USED получит дополнительную секцию, если такая секция будет создана инструкцией ALTER PARTITION FUNCTION. Чтобы создать дополнительные неназначенные файловые группы, которые должны содержать новые секции, используйте инструкцию ALTER PARTITION SCHEME.

    Когда первичная файловая группа указывается в file_group_name [ 1**,**...n], аргумент PRIMARY должен отделяться так же, как в [PRIMARY], так как это ключевое слово.

Разрешения

Для выполнения CREATE PARTITION SCHEME могут использоваться следующие разрешения.

  • Разрешение ALTER ANY DATASPACE. Это разрешение по умолчанию для членов предопределенной роли сервера sysadmin и предопределенных ролей базы данных db_owner и db_ddladmin.

  • Разрешения CONTROL или ALTER на базу данных, в которой создается схема секционирования.

  • Разрешение CONTROL SERVER или ALTER ANY 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, будут назначены так, как показано в следующей таблице.

Файловая группа

test1fg

test2fg

test3fg

test4fg

Секция

1

2

3

4

Values

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <= 1000

col1 > 1000

Б. Создание схемы секционирования, ставящей в соответствие несколько секций одной файловой группе

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

Файловая группа

test1fg

test1fg

test1fg

test2fg

Секция

1

2

3

4

Values

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <= 1000

col1 > 1000

В. Создание схемы секционирования, сопоставляющей все секции с одной файловой группой

В следующем примере создается такая же функция секционирования, что и в предыдущих примерах, и далее создается схема секционирования, которая сопоставляет все секции с одной и той же файловой группой.

CREATE PARTITION FUNCTION myRangePF3 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
GO
CREATE PARTITION SCHEME myRangePS3
AS PARTITION myRangePF3
ALL TO ( test1fg );

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