• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    对分区表进行alter-switch时遇到的错误
    创建一个和目标表一样定义的表;
    在表上加上constraint以确保表的数据在目标分区里;
    Alter table 源表 switch to 目标表 partition 分区号
    其中分区号可以通过$partition.partion_func( column value)获得
    这个过程比insert select要快很多,因为不涉及到io,只需要修改元数据,该边partition的onwer而已。

    但是上述过程只适用于目标表的分区函数中目标分区已存在的情况。比如你定义了边界为1,2,3的分区函数,那么4和5都会插入到第4个分区里。

    所以我推荐使用这种提前定义好分区函数所有分区的方法,如果你要按天分区,你就先定义好1000个分区。这种方法比较简单,不需要在加入数据时进行检查,从而导致错误。

    如果您一定要使用动态分区的话,在加入一个源表作为新的分区时,需要如下操作:

    首先取得新加入的分区列的值,设为X;
    通过sys.Partition_range_values和sys.partition_functions找到目标分区函数所有的边界值;
    进行如下的检查:
    在这里分界值属于左边分区还是右边分区是有区别的,我们假设属于左边分区;
    如果X存在于2步的边界值集合中,那么恭喜你,不需做额外的操作;
    如果X大于2步中最大的边界,你不仅需要为X分裂出一个分区,还要保证小于X的数据都有自己分区。
    每次加入分区时检查已有的边界值,如果不等于其中的任何一个,则以X为参数split, 并删除目标表中分区列和X相同的数据。
    像之前描述的步骤那样switch源表到目标分区中。
    如果在2步的时候,目标分区已经存在数据,alter ...switch语句就会失败,原因是目标分区不为空。

    可以理解为,switch操作是修改表的元数据,用新的分配单元替换原来的分配单元。如果原来的分配单元不为空,那么这次替换就会造成一些数据的丢失,从而破坏了数据的完整性,因此是不允许的。
    您可能感兴趣的文章:
    • AlternatingItemTemplate类似于 ItemTemplate 元素
    • MySQL ALTER语法的运用方法
    • MySQL学习笔记5:修改表(alter table)
    • mysql alter语句用法实例
    • ORACLE 修改表结构 之ALTER CONSTAINTS的使用
    • 详解MySQL中ALTER命令的使用
    • MySQL中的alter table命令的基本使用方法及提速优化
    • MySql数据库之alter表的SQL语句集合
    • MySQL 数据库 ALTER命令讲解
    • MySQL ALTER命令使用详解
    上一篇:sql Union和Union All的使用方法
    下一篇:sql left join 命令详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    对分区表进行alter-switch时遇到的错误 对,分区表,进行,alter-switch,