对分区表进行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 元素
DataList Web 服务器控件 通过使用模板显示数据源中的项.通过操作组成 DataList 控件的不同组件的模板(如 ItemTemplate 和 HeaderTemplate),可以自定义该控件的外观和内容. <asp:DataList id="DataList1" CellPadding="pixels" CellSpacing="pixels" DataKeyField="DataSou
-
MySQL学习笔记5:修改表(alter table)
我们在创建表的过程中难免会考虑不周,因此后期会修改表修改表需要用到alter table语句 修改表名 复制代码 代码如下: mysql> alter table student rename person; Query OK, 0 rows affected (0.03 sec) 这里的student是原名,person是修改过后的名字 用rename来重命名,也可以使用rename to 修改字段的数据类型 复制代码 代码如下: mysql> alter table person modi
-
mysql alter语句用法实例
//主键 ALTER TABLE tablename add new_field_id int(5) UNSIGNED DEFAULT 0 NOT NULL anto_increment,ADD PRIMARY KEY (new_field_id); //增加一个新列 mysql>ALTER TABLE tablename ADD fieldname fieldtype 如: ALTER TABLE t2 ADD d TIMESTAMP; ALTER TABLE infos ADD ex TIN
-
MySQL ALTER命令使用详解
ALTER TABLE允许你修改一个现有表的结构.例如,你可以增加或删除列.创造或消去索引.改变现有列的类型.或重新命名列或表本身.你也能改变表的注释和表的类型. 你可以使用CHANGE old_col_name create_definition子句重命名一个列.为了这样做,指定旧的和新的列名字和列当前有的类型.例如,重命名一个INTEGER列,从a到b,你可以这样做: mysql> ALTER TABLE t1 CHANGE a b INTEGER; 如果你想要改变列的类型而非名字,就算他们
-
详解MySQL中ALTER命令的使用
MySQL的ALTER命令是非常有用的,当想改变表的名称,表的字段,或者如果要添加或删除一个现有的表中的列. 让我们开始创建一个表名为testalter_tbl的用例: root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table testalter_tbl -> ( -> i INT, -> c C
-
MySQL 数据库 ALTER命令讲解
MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成. 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 开始本章教程前让我们先创建一张表,表名为:testalter_tbl. root@host# mysql -u root -p password; Enter password:*****
-
MySQL ALTER语法的运用方法
以下的文章主要介绍的是MySQL ALTER语法的实际运用,我们大家都知道MySQL ALTER语法在实际应用中的比例还是很大的,所以了解一下MySQL ALTER语法的实际运用可以很好的选择. MySQL ALTER语法中ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] 复制代码 代码如下: alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER
-
MySql数据库之alter表的SQL语句集合
mysql之alter表的SQL语句集合,包括增加.修改.删除字段,重命名表,添加.删除主键等. 1:删除列 ALTER TABLE [表名字] DROP [列名称] 2:增加列 ALTER TABLE [表名字] ADD [列名称] INT NOT NULL COMMENT '注释说明' 3:修改列的类型信息 ALTER TABLE [表名字] CHANGE [列名称][新列名称(这里可以用和原来列同名即可)] BIGINT NOT NULL COMMENT '注释说明' 4:重命名列 ALT
-
ORACLE 修改表结构 之ALTER CONSTAINTS的使用
1,创建联合主键 ALTER TABLE 表名 ADD CONSTRAINTS 结束名 PRIMARY KEY (列名,列名..); 2,新增字符 ALTER TABLE 表名 ADD (COLUMN DATATYPE [DEFAULT VALUE][NULL/NOT NULL]); 3,删除列 ALTER TABLE 表名 DROP (COLUMN)J; 4,修改表的字符 ALTER TABLE 表名 MODIFY (COLUMN DATATYPE [DEFAULT VALUE][NULL/N
-
MySQL中的alter table命令的基本使用方法及提速优化
一.基本用法 1. 增加列 alter table tbl_name add col_name type 例如, 给pet的表增加一列 weight, mysql>alter table pet add weight int; 2. 删除列 alter table tbl_name drop col_name 例如, 删除pet表中的weight这一列 mysql>alter table pet drop weight; 3. 改变列 分为改变列的属性和改变列的名字 改变列的属性--方法1:
随机推荐
- CSS清除浮动方法汇总
- Angularjs自定义指令Directive详解
- Exitjs获取DataView中图片文件名
- VSS 软件配置管理 版本控制第1/2页
- iOS开发之路--微博骨架搭建
- PHP邮件群发机实现代码
- PHP Socket网络操作类定义与用法示例
- HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详解
- 元素水平居中方案全集
- java使用des加密解密示例分享
- 详解Ruby设计模式编程中对单例模式的运用
- struts2 jquery 打造无限层次的树
- 用asp记录论坛用户密码(dvbbs,leadbbs等)
- 使用Python读写文本文件及编写简单的文本编辑器
- php表单提交程序的安全使用方法第1/2页
- Android 录制手机屏幕视频生成GIF图片实例详解
- 浅谈Vue SSR 的 Cookies 问题
- 详解python函数传参是传值还是传引用
- Vue 将后台传过来的带html字段的字符串转换为 HTML
- Android 使用AsyncTask实现断点续传