修改資料分割函數
適用於: SQL Server Azure SQL 資料庫 Azure 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_owner 和 db_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 分割資料分割
在 [物件總管] 中,連線到您的目標資料庫。
在標準列上,選取 [新增查詢] 。
複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。
此範例:
- 檢查舊版的資料分割函數
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 合併兩個資料分割
在 [物件總管] 中,連線到您的目標資料庫。
在標準列上,選取 [新增查詢] 。
複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。
此範例:
- 檢查是否有舊版的資料分割函數
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 刪除資料分割函數
在 [物件總管] 中,連線到您的目標資料庫。
展開您想要刪除資料分割函數的資料庫,然後展開 [儲存體] 資料夾。
展開 [資料分割函數] 資料夾。
以滑鼠右鍵按一下您想要刪除的資料分割函數,然後選取 [刪除]。
在 [刪除物件] 對話方塊中,確定已選取正確的資料分割函數,然後選取 [確定]。
後續步驟
在下列文章中深入了解相關概念: