13

我有一个表'X'并做了以下

  1. 创建分区函数 PF1(INT) 作为值的左侧范围 (1, 2, 3, 4)
  2. 将分区方案 PS1 创建为分区 PF1 全部到 ([PRIMARY])
  3. 在 PS1(col1) 上的 X(col1) 上创建集群索引 CIDX_X

这 3 个步骤为我拥有的数据创建了 4 个逻辑分区。

我的问题是,如何将此分区恢复为原始状态?

4

2 回答 2

32

经过2天的不断寻找

步骤:

  1. DROP INDEX CIDX_X on X/* 删除集群 */
  2. CREATE CLUSTERED INDEX CIDX_X1 ON X(col1) ON [PRIMARY]/* 在表上创建另一个聚集索引以将其从分区方案中释放出来;在这里,“ ON [primary] ”部分是从表中删除分区方案的关键!*/
  3. DROP PARTITION SCHEME PS1
  4. DROP PARTITION FUNCTION PF1
  5. DROP INDEX CIDX_X1 ON X/* 删除你创建的虚拟聚集索引,因为它只是为了将表从分区方案中释放出来 */
于 2010-06-08T05:53:42.287 回答
2

我发现应该在 Storm 给出的答案中添加一些额外的步骤,因为在删除聚集索引之前,有一些点,比如 ... 在删除聚集索引之前,需要删除发布,因为它不允许在此之前删除聚集索引并且在删除那些分区方案和分区功能后需要重新创建,并且也需要再次开始发布。

注意:我使用的是 SQL 2012
主键通常是最常用的集群约束,所以无论我使用主键,请考虑这些步骤也适用于集群约束。此外,PS = 分区方案,PF = 分区函数。

一些准备步骤:

  1. 制作 drop 发布脚本
  2. 制作创建发布脚本
  3. 识别所有与分区方案有依赖关系的表,并记下它们的主键/聚集索引。另外,记下主键列使用的所有字段(最好生成主键或聚集索引的脚本)
  4. 为受影响的表制作脚本。
  5. 为有问题的 PF 和 PS 编写脚本。

    以上所有,在右键单击时使用 SQL Management Studio“生成脚本”。并选择 drop 和 create。

现在,当一切准备就绪。
1. 删除发布(使用您生成的脚本)
2. 删除与 PS 链接的那些表的主键约束。 alter table [tablename] drop constraint [pk_name]
3. 创建一个虚拟约束,但使用您在删除的主键中使用的相同字段。CREATE CLUSTERED INDEX CIDX_X1 ON tablename(field1,field2,field3,field4) ON [PRIMARY]
4.删除分区方案和功能。

DROP PARTITION SCHEME [PartitionSchemeName_PS]
GO

DROP PARTITION FUNCTION [PartitionfunctionName_PF]
GO
  1. 删除虚拟索引 DROP INDEX CIDX_X1 ON tablename
  2. 添加回聚集索引/主键约束(使用前面提到的生成的脚本。
  3. 创建 Partition 函数和 Partition 模式(确保 PS > PF 的元素数。其中 PS = PF+2 个元素)
  4. 添加回发布者(使用生成的脚本)
于 2015-10-20T07:31:30.157 回答