我有一个表大量数据,在该表上有三个索引
1。聚合索引(包含三个字段)
2。唯一非聚合索引(包含两个字段)
3。非聚合索引(一个字段)
该表已经被分区,而且聚合索引中包含分区列,但是其他索引都不包含现在我希望对该表进行switch out的操作,该如何进行。PS:不能改表结构,如果需要更改必须还原索引分区

解决方案 »

  1.   

    switch out是啥ALTER TABLE里的switch to吗?
      

  2.   

    ALTER TABLE ... SWITCH PARTITION x TO ...
      

  3.   

     合并分区 再SWITCH OUT 再分区吧
      

  4.   

    ALTER TABLE ... SWITCH PARTITION x TO ... 
    用这个语句可以将某个分区的数据都转到指定的地方(比如一个特定的表),然后该分区的结构还是保留
      

  5.   

    转移分区数据,alter table t_lock switch partition 1 to t_lockHistory partition 1,结构保留
     
     
      

  6.   

    回16,17楼:
    确实可以用这个语句来切换分区我现在就是这样做的:
    1.删除那个唯一索引
    2.做ALTER TABLE ... SWITCH PARTITION x TO ... 
    将数据转出去,并删除
    3.重建那个唯一索引(因为如果直接作步骤2那么会在唯一索引这里报错)因为我现在有大量数据,所以索引删除和重建会很耗时
    我希望能够不用删除操作就可以执行步骤2
      

  7.   


    在建立唯一索引时,如果唯一索引不包含 分区字段,不会报错吗? 你是怎么建成这个唯一索引的呀。我怎么在建不包含分区字段的唯一索引时,会报错呀,这里的wcDate是分区列,wcT表已经有一个聚集索引:create unique index uni_wcT_v on wcT(uni_v1,uni_v2)消息 1908,级别 16,状态 1,第 1 行
    列 'wcDate' 是索引 'uni_wcT_v' 的分区依据列。唯一索引的分区依据列必须是索引键的子集。
      

  8.   

    又试了一下,我在上面说的有点问题,我上面之所以在建立唯一索引报错是因为,我的分区表有个primary key,是聚集索引,包含了分区列,而你的分区表,有一个聚集索引,包含了分区列,这时建不包含分区列的唯一索引不会报错,
    但每次进行分区操作时,你说必须要删除这个唯一索引,上面说到分区操作会导致不包含分区列的唯一索引,失效,所以必须要重建,当数据量大时,重建索引时间很长,无法通过这个索引来访问数据的时间也会很长,大大降低数据的可访问性。简单来说,就是没办法,不管是在sql server,还是oracle,都是没办法,要想不这样,只能是加上分区列。