撤消表分区

时间:2010-06-03 13:00:10

标签: sql-server database sql-server-2008 partitioning

我有一张桌子'X'并做了以下

  1. 创建分区功能PF1(INT)作为值的左下角(1,2,3,4)
  2. 创建分区方案PS1作为分区PF1 ALL([主要])
  3. 在X上创建聚集索引CIDX_X(col1)ON PS1(col1)
  4. 这3个步骤创建了我拥有的数据的4个逻辑分区。

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

2 个答案:

答案 0 :(得分:23)

经过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 / *删除您创建的虚拟聚簇索引,因为它仅用于从分区方案中释放表* /

答案 1 :(得分:0)

我发现应该在Storm给出的答案中添加一些额外的步骤,因为在删除聚集索引之前有一些像......之类的,需要删除发布,因为它不会允许聚簇索引获取在此之前删除并且在删除之后需要重新创建分区方案和分区功能,并且还需要再次启动发布。

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

  

一些准备步骤:

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

    以上所有,使用SQL Management Studio"生成脚本"点击右键。然后选择drop and create。

  6. 现在,一切准备就绪 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. 创建分区函数和分区模式(确保PS的元素数量> PF。其中PS = PF + 2元素)
    4. 添加发布者(使用生成的脚本)