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 必須已在資料庫中。 單一資料分割無法同時包含 FILESTREAM 和非 FILESTREAM 檔案群組。

  • 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] 列出檔案群組的順序來指派給各個檔案群組。 在 [,...n] 中,可以重複指定相同的 file_group_name。 如果 n 不足以存放 partition_function_name 所指定的資料分割數目,CREATE PARTITION SCHEME 便會失敗,且會出現一則錯誤。

    如果 partition_function_name 產生的資料分割數目比檔案群組少,第一個未指派的檔案群組會標示為 NEXT USED,且會出現一則命名 NEXT USED 檔案群組的參考訊息。 如果指定了 ALL,唯一的 file_group_name 會維護它的 NEXT USED 屬性,以用於這個 partition_function_name。 如果在 ALTER PARTITION FUNCTION 陳述式中建立資料分割,NEXT USED 檔案群組便會收到其他資料分割。 若要建立其他未指派的檔案群組來存放新的資料分割,請使用 ALTER PARTITION SCHEME。

    當您指定 file_group_name [ 1**,**...n] 中的主要檔案群組時,必須依照 [PRIMARY] 中的相同方式來分隔 PRIMARY,因為它是一個關鍵字。

權限

下列權限可用來執行 CREATE PARTITION SCHEME:

  • ALTER ANY DATASPACE 權限。 這個權限預設會授與系統管理員 (sysadmin) 固定伺服器角色以及 db_ownerdb_ddladmin 固定資料庫角色的成員。

  • 建立資料分割結構描述之資料庫的 CONTROL 或 ALTER 權限。

  • 在建立資料分割結構描述的資料庫中,其伺服器的 CONTROL SERVER 或 ALTER ANY DATABASE 權限。

範例

A. 建立將每個資料分割對應至不同檔案群組的資料分割結構描述

下列範例會建立一個資料分割函數,將資料表或索引分割成四份資料分割。 之後,會建立資料分割結構描述來指定分別存放這四份資料分割的檔案群組。 這個範例假設這些檔案群組已在資料庫中。

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 的資料表,它的資料分割會依照下表所顯示來進行指派。

檔案群組

test1fg

test2fg

test3fg

test4fg

資料分割

1

2

3

4

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <= 1000

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 的資料表,它的資料分割會依照下表所顯示來進行指派。

檔案群組

test1fg

test1fg

test1fg

test2fg

資料分割

1

2

3

4

col1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <= 1000

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 檔案群組會收到新建立的資料分割。