分享方式:


CREATE PARTITION SCHEME (Transact-SQL)

適用於:SQL Server Azure 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] 中列出的檔案群組順序指派給各個檔案群組。 在 [ ,...n] 中,可以重複指定相同的 file_group_name。 如果 n 不足無法容納 partition_function_name 中指定的資料分割數目,則 CREATE PARTITION SCHEME 會失敗並顯示錯誤。

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

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

SQL Database 只支援 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 1 col1<= 1
test2fg 2 col1>1col1<= 100
test3fg 3 col1>100col1<= 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 );  

在資料分割資料行 col1 上使用分割區函數 myRangePF2 之資料表的分割區,會依照下表所示進行指派。

檔案群組 資料分割
test1fg 1 col1<= 1
test1fg 2 col1>1col1<= 100
test1fg 3 col1>100col1<= 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)  

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

已順利建立分割區配置 'myRangePS4'。 'test5fg' 已標示為分割區配置 '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] );  

下一步

在下列文章中深入了解資料表資料分割與相關概念: