如何将单一Table转移 (Switch) 至Partition Table上
之前看了一些关于Partition Table可以透过Switch的方式转移某个Partition到另一个非Partition Table上,来降低Insert Into大量数据会造成IO的问题。
但是我有另一需求是反向作业,就是将非Partition Table的数据Switch到Partition Table上。如下图所示我有一张记载当年度的Table叫Answers,然后年底会将Answers的数据转移到AnswersHistory上,并清空Answers的数据表来记录下一年度。
下图中我们可以看到AnswersHistory存放了101~105年度的数据,而Answers放的是106年度数据(笔数为10000笔)。本LAB就是要采用Switch的方式将Answers的106年度数据倒到AnswersHistory中。
我们看一下Answers跟AnswersHistory目前的不同处就只有索引,AnswersHistory多了3个索引IX1 IX2 IX3,其他像字段PK则完全一样。(注意:要能使用Switch这一个功能需要两张Table都在相同的File Group下)。
下图中我们看一下目前AnswersHistory各Partition的数据笔数,红色圈选处可以看到Partition 6的笔数是0笔。
接下来我们用下面语法来做数据表Switch的动作。
Alter Table Answers Switch To AnswersHistory Partition 6
执行后发生错误,错误消息是表示Answers缺少AnswersHistory上面的IX1索引。
当我们在Answers上建立跟AnswersHistory上一模一样的IX1索引后再次Switch,SQL还是报错,错误消息表示Answers数据表缺少IX2。
当我们在Answers上建立跟AnswersHistory上一模一样的IX2索引后再次Switch,SQL还是报错,错误消息表示Answers数据表缺少IX3。
当我完成所有索引建立后再执行Switch,还是报错。只是这次消息不同,如下图蓝色圈选处
/* 消息4982,层级16,状态1,行1 ALTER TABLE SWITCH 陈述式失败。来源数据表'DB1.dbo.Answers' 的检查条件约束所允许的值, 于目标数据表'DB1.dbo.AnswersHistory' 数据分割'6' 上定义的范围并不允许。 */
看到这消息还真不知道改怎么解,后来拜了google大神后在一篇文中找到说明。将数据从Source Table转入Target Table,因为没有CONSTRAINT,在转换数据时Target Table不知道正确的数据范围,所以会报错。
解法就是在Answers数据表加入Constraint去限制hy的值一定都是106,如下图所示。
当我完成上一步骤后,我再次执行Switch的语法就成功完成。
接下来Count两张数据表,可以看到Answers没有笔数,而AnswersHistory则多了106年度的10000笔数据。
从Partitions角度来看,AnswersHistory的Partition 6也是有了10000笔数据。所以表示我们已经成功将Answers的数据全部转到AnswersHistory的Partition 6了。
我是ROCK
rockchang@mails.fju.edu.tw
原文:大专栏 如何将单一Table转移 (Switch) 至Partition Table上
原文地址:https://www.cnblogs.com/petewell/p/11465526.html
- 【Spring实战】—— 6 内部Bean
- 几款可替代Dreamweaver的HTML5开发工具
- Linux下的Telnet设置方法介绍
- 2017年11月互联网和相关服务业保持快速增长
- 深度学习胸部x射线
- C+实现神经网络之壹—Net类的设计和神经网络的初始化
- 死亡不可避免,但何时死,人工智能或有发言权
- 打开手机的这个功能,微信支付宝不怕盗刷!
- 手把手教你cuda5.5与VS2010的编译环境搭建
- Apache实现反向代理负载均衡
- linux下Apache服务器使用入门----httpd.conf
- linux下JBOSS使用入门
- CentOS下重新安装JDK,避免OpenJDK干扰
- linux虚拟机与winodows共享文件夹----linux安装VMware tools
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day65:矩阵中的路径
- Day66:机器人的运动范围
- 第11天:NLP补充——主题模式(LDA)
- 一文快速上手Rollup,JavaScript类库打包好帮手
- Day67:剪绳子
- Typecho实现微信发消息:Type时光机
- 插入排序
- Typecho1.1仿简书主题小屏幕菜单栏展开优化
- Typecho1.1仿简书主题大小屏适配
- Typecho1.1文章内链接用新窗口打开的办法
- 搭建一个低配版的Mock Server
- Nginx解决跨域资源问题:No 'Access-Control-Allow-Origin' header is present on the requested resource.
- Typecho 仿简书主题 时间轴归档页实现
- Typecho如何添加“编辑”当前文章按钮
- Flutter入门第二讲:项目运行,Hello world