1.6 添加分区与合并分区

1.6  添加分区与合并分区


1.6.1  添加分区

  如果某一个分区的数据量大量增加,可能需要分拆这个分区

  在前面的示例中,已经将销售订单按年份分割为“2013年之前”、“2013年”、“2014年及以后”,共3个分区。下面的示例将最后一个分区拆分为“2014年”和“2015年及以后”。



  首先需要为新的分区准备新的文件组 FG2015 和数据文件。

ALTER DATABASE [SQLDB01] ADD FILEGROUP [FG2015]

GO

ALTER DATABASE [SQLDB01] ADD FILE ( NAME = N'FG2015_data', FILENAME = N'C:\MSSQL\Data\FG2015_data.ndf' , SIZE = 5120KB , FILEGROWTH = 1024KB ) TO FILEGROUP [FG2015]

GO


  然后修改分区方案,添加文件组 FG2015 接收已分区表的所有其他分区。最后使用 SPLIT 运算符在分区函数中插入一个新的边界点。

ALTER PARTITION SCHEME PartScheme NEXT USED FG2015

ALTER PARTITION FUNCTION PartFunc() SPLIT RANGE('2015-1-1')


  执行上述语句后,SQL Server 将立即将满足条件的记录行转移到新的分区。如果需要移动的数据量比较大,可能会产生明显的性能问题。


1.6.2  合并分区

  可以使用 MERGE 运算符从分区函数中删除一个边界点。

  下例将删除 '2013-1-1' 这个边界点,从而将“2013年之前”和“2013年”两个区合并为一个“2014年之前”分区。合并之后,所有的数据都将转移到左边的分区。

ALTER PARTITION FUNCTION PartFunc() MERGE RANGE ('2013-1-1')



1.6.3  删除文件组

  修改了分区函数和方案分区,将导致文件组与分区方案之间的对应关系发生了变化。可以通过下面的查询语句确认 Orders 表的最新分区方案与文件组的对应关系。

SELECT TOP (100) PERCENT OBJECT_NAME(p.object_id) AS TableName, p.index_id, 

      p.partition_number, p.rows, ds.name AS FileGroupName

FROM sys.partitions AS p INNER JOIN

      sys.allocation_units AS au ON p.hobt_id = au.container_id INNER JOIN

      sys.data_spaces AS ds ON au.data_space_id = ds.data_space_id

WHERE (p.object_id = OBJECT_ID('Orders')) AND (p.index_id <= 1)

ORDER BY p.partition_number


wKiom1XW6fjSO-KVAAB8cTvPNqc315.jpg


  根据查询结果,该分区方案最初对应的3个文件组经过了以下变化:

(1)插入了新的边界点 “2015-1-1”,并通过 NEXT USED 指定了将些边界点右侧的数据全部迁移到 FG2015 文件组。

(2)撤消了边界点“2013-1-1”,导致原来介于“2013-1-1”与“2014-1-1”之间的数据(位于 FG2013 文件组)被合并到左侧的文件组(即 FG2012 文件组)。


  经过上述修改,FG2013文件组已经不再属于该分区方案,如果该文件组不包含额外的对象(表或索引),则可以删除这个文件组及其拥有的数据文件。

USE [SQLDB01]

GO

ALTER DATABASE [SQLDB01] REMOVE FILE [FG2013_data]

GO

ALTER DATABASE [SQLDB01] REMOVE FILEGROUP [FG2013]

GO


提示:

  在删除文件组之前,请先确认该文件组所拥有的所有数据文件都已经被删除。如果文件组还拥有数据文件,则删除文件组失败。



本文出自 “SQL Server 管理员指南” 博客,谢绝转载!

你可能感兴趣的:(sql,分区)