共用方式為


CREATE PARTITION SCHEME (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體

在目前的資料庫中建立一項配置,將分割的資料表或索引的資料分割,對應至一或多個檔案群組。 將資料表或索引的資料列對應至資料分割的值,是在資料分割函數中指定。 在建立分割區配置之前,必須先在 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 ] )
[ ; ]

引數

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>]的順序。 相同的 file_group_name 可以在 [, ...<n>]中指定多個時間。 如果 n 不足以保存 partition_function_name中指定的分割區數目,CREATE PARTITION SCHEME 會失敗併發生錯誤。

如果 partition_function_name 產生的數據分割少於檔案群組,則第一個未指派的檔案群組會標示為 NEXT USED,而資訊訊息會顯示為 NEXT USED 檔案群組命名。 如果指定了 ALL,唯一的 file_group_name 會維護這個 NEXT USED 屬性。 如果檔案群組是在 NEXT USED 語句中建立,則 ALTER PARTITION FUNCTION 檔案群組會收到額外的分割區。 若要建立更多未指派的檔案群組來儲存新的分割區,請使用 ALTER PARTITION SCHEME

當您在 <file_group_name> [, ...<n>]中指定主要檔案群組時,PRIMARY 必須以 [PRIMARY]分隔,因為它是 關鍵詞。

SQL Database 僅支援 PRIMARY。 請參閱 範例 E

權限

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

  • ALTER ANY DATASPACE 許可權。 這個權限預設會授與 sysadmin 固定伺服器角色以及 db_ownerdb_ddladmin 固定資料庫角色的成員。

  • 正在建立分割區配置之資料庫的 CONTROLALTER 許可權。

  • CONTROL SERVERALTER 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);

在數據分割數據行 myRangePF1 上使用數據分割函數 col1 之數據表的數據分割,如下表所示。

檔案群組 資料分割
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);

在數據分割數據行 myRangePF2 上使用數據分割函數 col1 之數據表的數據分割,如下表所示。

檔案群組 資料分割
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);

執行這個陳述式會傳回下列訊息。

Partition scheme 'myRangePS4' has been created successfully. 'test5fg' is marked as the next used filegroup in partition scheme 'myRangePS4'.

如果將資料分割函數 myRangePF4 改成加入資料分割,test5fg 檔案群組會收到新建立的資料分割。

E. 只在 PRIMARY 上建立分割區配置

在 Azure SQL Database 中,不支援新增檔案和檔案群組,但只跨 PRIMARY 檔案群組進行分割,支援數據表分割。

下列範例會建立一個資料分割函數,將資料表或索引分割成四個資料分割。 接著會建立分割區配置,指定在 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]);