创建一个和目标表一样定义的表;
在表上加上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操作是修改表的元数据,用新的分配单元替换原来的分配单元。如果原来的分配单元不为空,那么这次替换就会造成一些数据的丢失,从而破坏了数据的完整性,因此是不允许的。
对分区表进行alter-switch时遇到的错误
2021-10-08 16:05数据库知识网 数据库技术
将一个表的数据加入分区表中,可以通过如下步骤进行
延伸 · 阅读
- 2024-12-13国行Switch官宣停止网络服务后 各平台国行版仍然
- 2024-12-13国内电商泄露Switch 2屏幕保护膜 尺寸变更大了
- 2024-12-13你对Switch 2有哪些期待?
- 2024-12-13《漫威争锋》制作人:绝对不会登陆Switch
- 2024-12-13Switch 2或支持SD Express存储!速度高达985MB/s
- 2024-12-13真机外观疑似曝光?配件厂商意外泄露Switch 2图片
- 数据库技术
阿里云服务器怎么拷贝数据库
阿里 云服务器 是一种云计算服务,提供了强大的云服务器资源,让用户可以方便地创建、管理和运行自己的应用程序。拷贝数据库是在服务器迁移、备份...
- 数据库技术
在将文本文件导入 MySQL 表时,MySQL 如何评估文本文件中写入的两
假设如果文本文件中写入的两行之间有一个空行,那么在将该文本文件导入 MySQL 表时,MySQL 会将其评估为数据行。可以通过以下示例来理解 - 示例 假设我...
- 数据库技术
sql小计汇总 rollup用法实例分析
rollup在oracle ,sql-server里面都有有。...
- 数据库技术
如何实现MySQL中修改表结构的语句?
如何实现MySQL中修改表结构的语句? MySQL 是一种流行的关系型数据库管理系统(RDBMS),用于存储和管理大量的数据。在实际的开发过程中,经常需要修改...
- 数据库技术
阿里云创建云数据库服务器
阿里云 是中国领先的云计算服务提供商,提供了一系列强大的云计算产品和服务。其中, 阿里云 数据库服务器(ApsaraDB for RDS)是一种托管式的关系型数据...
- 数据库技术
SQL中case when then else end用法实例
一、阐述 case when then else end 可以理解为java的if-else if -else。可以理解为流程控制语句或条件控制语句。可以实现资料获取的时候,可以更多的条件和自定义...
- 数据库技术
利用MongoDB技术开发中遇到的数据删除问题的解决方案探究
利用MongoDB技术开发中遇到的数据删除问题的解决方案探究 引言: 随着互联网和移动互联网的兴起,数据的管理变得愈发重要。在开发过程中,我们经常需...
- 数据库技术
oracle可以重复索引吗
Oracle不允许重复索引。在Oracle数据库中,创建重复索引是不被允许的,并且会引发错误。 索引是一种用于提高数据库查询性能的数据结构。它们允许快速访...