修改資料分割函數

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

您可以使用 Transact-SQL,在資料分割資料表或索引的資料分割函數中,加上或減去指定的資料分割數 (遞增為 1),藉以變更 SQL Server 中資料表或索引的資料分割方式。 若要加入資料分割,可以將現有資料分割「拆解」為兩個資料分割,並重新定義新資料分割的界限。 若要卸除資料分割,可以將兩個資料分割的界限「合併」成為一個。 最後這個動作會重新擴展一個資料分割,並使另一個資料分割成為未指派。 在修改資料分割函數之前,請先檢閱最佳做法

警告

多份資料表或索引可以使用相同的資料分割函數。 當您修改資料分割函數時,將會在單一交易中影響所有資料表或索引。 修改之前,請先檢查資料分割函數的相依性

資料表分割也可在 Azure Synapse Analytics 的專用 SQL 集區使用,但存在一些語法差異。 深入了解專用 SQL 集區中的資料分割資料表

限制

  • ALTER PARTITION FUNCTION 只能用來將一個資料分割拆解成兩個,或將兩個資料分割合併為一個。 若要變更資料表或索引的資料分割方式 (例如,從 10 個資料分割變更成 5 個),您可以使用下列任何一個選項:

    • 使用所需的資料分割函數來建立新的資料分割資料表,然後再使用 INSERT INTO ...SELECT FROM Transact-SQL 陳述式或 SQL Server Management Studio (SSMS) 中的 [管理資料分割精靈],將舊資料表中的資料插入新資料表中。

    • 建立堆積的資料分割叢集索引

      注意

      卸除資料分割叢集索引會產生資料分割堆積。

    • 使用 Transact-SQL CREATE INDEX 陳述式與 DROP EXISTING = ON 子句來卸除和重建現有的資料分割索引。

    • 執行 ALTER PARTITION FUNCTION 陳述式的序列。

  • 資料庫引擎不提供修改資料分割函數的複寫支援。 如果您要變更發行集資料庫中的資料分割函數,必須在訂閱資料庫中手動執行此作業。

  • ALTER PARTITION FUNCTION 所影響的所有檔案群組都必須在線上。

權限

下列中的任何權限都可用來執行 ALTER PARTITION FUNCTION:

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

  • 對於建立資料分割函數之資料庫的 CONTROL 或 ALTER 權限。

  • 對於建立資料分割函數之資料庫伺服器的 CONTROL SERVER 或 ALTER ANY DATABASE 權限。

查詢資料庫中的資料分割物件

下列查詢會列出資料庫中的所有資料分割物件。 這可以用來檢查資料分割函數的相依性,然後再修改它。

SELECT 
	PF.name AS PartitionFunction,
	ds.name AS PartitionScheme,
    OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
	OBJECT_NAME(si.object_id) AS PartitionedTable, 
	si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
	ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
	ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
	ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;

使用 Transact-SQL 分割資料分割

  1. 在 [物件總管] 中,連線到您的目標資料庫。

  2. 在標準列上,選取 [新增查詢] 。

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。

    此範例:

    • 檢查舊版的資料分割函數 myRangePF1,如果有找到,則將其刪除。
    • 建立名為 myRangePF1 的資料分割函數,並將資料表分割成四個資料分割。
    • 分割 boundary_values 100 到 1000 之間的資料分割,以建立 boundary_values 100 到 500 之間的資料分割,以及 boundary_values 500 到 1000 之間的資料分割。
    IF EXISTS (SELECT * FROM sys.partition_functions  
        WHERE name = 'myRangePF1')  
        DROP PARTITION FUNCTION myRangePF1;  
    GO
    
    CREATE PARTITION FUNCTION myRangePF1 (int)  
    AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
    GO  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    SPLIT RANGE (500);  
    

使用 Transact-SQL 合併兩個資料分割

  1. 在 [物件總管] 中,連線到您的目標資料庫。

  2. 在標準列上,選取 [新增查詢] 。

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。

    此範例:

    • 檢查是否有舊版的資料分割函數 myRangePF1,如果有找到,則將其刪除。
    • 建立名為 myRangePF1 且有三個界限值的資料分割函數,以產生四個資料分割。
    • 將 boundary_values 1 到 100 之間的資料分割與 boundary_values 100 到 1,000 之間的資料分割合併。
    • 這會讓資料分割函數 myRangePF1 有兩個界限點:1 和 1,000。
    IF EXISTS (SELECT * FROM sys.partition_functions  
        WHERE name = 'myRangePF1')  
        DROP PARTITION FUNCTION myRangePF1;  
    GO 
    
    CREATE PARTITION FUNCTION myRangePF1 (int)  
    AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );  
    GO  
    
    ALTER PARTITION FUNCTION myRangePF1 ()  
    MERGE RANGE (100);  
    

使用 SSMS 刪除資料分割函數

  1. 在 [物件總管] 中,連線到您的目標資料庫。

  2. 展開您想要刪除資料分割函數的資料庫,然後展開 [儲存體] 資料夾。

  3. 展開 [資料分割函數] 資料夾。

  4. 以滑鼠右鍵按一下您想要刪除的資料分割函數,然後選取 [刪除]

  5. 在 [刪除物件] 對話方塊中,確定已選取正確的資料分割函數,然後選取 [確定]。

後續步驟

在下列文章中深入了解相關概念: