代码之家  ›  专栏  ›  技术社区  ›  Storm

撤消表分区

  •  10
  • Storm  · 技术社区  · 14 年前

    我有一张桌子“X”,我做了以下工作

    1. 创建分区函数pf1(int)作为值(1、2、3、4)的左范围
    2. 创建分区方案ps1作为分区pf1 all to([主])
    3. 在PS1(col1)的x(col1)上创建聚集索引cidx_x

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

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

    2 回复  |  直到 7 年前
        1
  •  21
  •   Storm    14 年前

    连续搜索2天后

    步骤:

    1. DROP INDEX CIDX_X on X /*删除群集*/
    2. CREATE CLUSTERED INDEX CIDX_X1 ON X(col1) ON [PRIMARY] /*在表上创建另一个聚集索引以将其从分区方案中释放;这里是“ 关于[初级] “部件是从表中删除分区方案的关键!*/
    3. DROP PARTITION SCHEME PS1
    4. DROP PARTITION FUNCTION PF1
    5. DROP INDEX CIDX_X1 ON X /*删除您创建的虚拟聚集索引,因为它的创建只是为了从分区方案中释放表。*/
        2
  •  0
  •   Mahernoz    9 年前

    我发现在风暴给出的答案中应该增加一些额外的步骤,因为有一些要点,比如……在删除聚集索引之前,需要删除发布,因为它不允许在此之前删除聚集索引,并且在删除这些分区方案和分区函数之后,需要重新创建这些分区方案和分区函数,并且还需要重新启动发布。

    注意:我使用的是SQL 2012
    主键通常是最常用的聚集约束,所以无论我在何处使用主键,请考虑这些步骤也适用于聚集约束。另外,ps=分区方案,pf=分区函数。

    一些准备步骤:

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

      以上所有这些,都是在右键单击时使用SQL Management Studio“生成脚本”。然后选择Drop和Create。

    现在,当一切就绪。
    1。删除发布(使用生成的脚本)
    2。删除那些与ps链接的表的主键约束。 alter table [tablename] drop constraint [pk_name]
    三。创建一个虚拟约束,但使用的字段与删除的主键中使用的字段相同。 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. 添加回发布服务器(使用生成的脚本)