技术开发 频道

详解SQL Server 2008滑动窗口的管理

  4.删除已经废弃的分区边界

  通过刚才所执行的查询我们可以看到,只有分区3,4,5当中有数据,如何才能将所有分区向左移动一位?

  此时我们只需要删除最左侧的分区边界

  (1)执行如下语句,从OrdersRange 分区表中删除2003年第3季度的分区边界:

  ALTER PARTITION FUNCTION OrderDateRangePFN()

  MERGE RANGE (
'20030701')

  
GO

   (2)此时我们的分区表中将只包含3个有数据的分区和1个空分区。执行如下语句进行核实,注意现在分区2,3,4当中有数据

  SELECT $partition.OrderDateRangePFN(OrderDate)

  
AS 'Parition Number'

  ,
min(OrderDate) AS 'Min Order Date'

  ,
max(OrderDate) AS 'Max Order Date'

  ,
count(*) AS 'Rows In Partition'

  
FROM OrdersRange

  
GROUP BY $partition.OrderDateRangePFN(OrderDate)

  
ORDER BY 1

  
GO

  (3)Merge操作删除了分区1,因此SQL Server对现有分区进行了重新编号,但并没有移动任何数据,只是改变了分区号。正因如此,数据库所使用的文件组并没有发生改变。执行如下语句进行查询:

  SELECT * FROM sys.filegroups

  (4)之前分区2存放在2003Q3 文件组,但现在该文件组已经不再与该分区表相关联了。执行如下语句,可以查看各个分区及其相关联的文件组:

  SELECT ps.name AS PSName,

  dds.destination_id
AS PartitionNumber,

  dds.data_space_id
AS FileGroup,

  fg.name
AS FileGroupName

  
FROM (((sys.tables AS t

  
INNER JOIN sys.indexes AS i

  
ON (t.object_id = i.object_id))

  
INNER JOIN sys.partition_schemes AS ps

  
ON (i.data_space_id = ps.data_space_id))

  
INNER JOIN sys.destination_data_spaces AS dds

  
ON (ps.data_space_id =

  dds.partition_scheme_id))

  
INNER JOIN sys.filegroups AS fg

  
ON dds.data_space_id = fg.data_space_id

  
WHERE (t.name = 'OrdersRange')

  
AND (i.index_id IN (0,1))

 

0
相关文章