ALTER TABLE SWITCH' statement failed. The table x' is partitioned while index 'x' is not partitioned.
1.L_Monitoring有这么些字段,ID,Collecttime,PlateType,PlateNO以及其他一些这段.
建立这个表的时候是个非分区表,其中ID是主键,并在Collecttime,PlateType,PlateNO上面建立了索引.
2.系统运行一阵子后,L_Monitoring数据变得非常大,5,6千万,而且后续还会更大.
所以要求将L_Monitoring表进行分区.分区方案是按照Collecttime进行每天分区.
Collecttime为分区字段,并将Collecttime字段改为聚集索引,原来主键ID改为非聚集索引.
请注意这个步骤:L_Monitoring表我是先建立索引,在建立分区;
3.系统要求清除三个月前的数据,只保留最近3个月的数据.所以,系统运行一阵子(3个月)后就需要清除数据.
加了JOB每天晚上从L_Monitoring删除数据,发现每天晚上数据库会在JOB执行删除的时候卡死.
或者说,每天晚上执行job的时候,对L_Monitoring表的操作会阻塞.
语句如下:delete L_Monitoring where Collecttime< '3个月前'
4.所以清除数据方法必须更改,不可单纯的用delete.所以改为SWITCH PARTITION的方法来删除数据.
这个方法的原理就是:
a.先建立一个和L_Monitoring结构一样的表:L_Monitoring_SwitchOut(L_Monitoring_SwitchOut这表我先用Collecttime分区,然后建立索引,请注意这个先后关系)
b.用ALTER TABLE L_Monitoring SWITCH PARTITION x TO L_Monitoring_SwitchOut PARTITION x语句将某一个分区的数据移动到L_Monitoring_SwitchOut,这个步骤是瞬时完成的
c.truncate table L_Monitoring_SwitchOut
所以,这种方法删除数据,按理说,会很快的.
5.可是ALTER TABLE L_Monitoring SWITCH PARTITION的时候,报错如下:
'ALTER TABLE SWITCH' statement failed. The table 'ITMP2.dbo.L_Monitoring' is partitioned while index 'IX_L_Monitoring_ID' is not partitioned.
其实这个错误提示得很明显了,index is not partitioned(索引没有分区),但是我当时没有搞清楚原理,所以导致各种实验.
原理就是:表的数据可以存不同分区,索引一样可存不同分区.
哎,我搞了好久,查了好多资料.
开始觉得有其他索引的表不能SWITCH,还试了SWITCH之前把索引删除,再SWITCH,然后recreate索引这种方法,这种方法可以swtich成功,但是每次recreate的时候也会阻塞.
最后各种实验终于发现在L_Monitoring表删除索引在recreate后,就可以swtich了.
好吧,可能你没看懂,为什么在索引第一次recreate后,就可以了呢.下面来解答:
1.表在建立索引的时候,如果表是分区表,则索引默认在分区上.
2.如果先建立索引,再分区,索引则在primary上;
所以,上面我步骤中,导致L_Monitoring和L_Monitoring_SwitchOut其实不同的,一个的索引在primary上,一个的索引在分区上.
明白了原理就好了,在上面第5步的时候, SWITCH之前,把PlateType,PlateNO,ID的索引删除在重建(只执行一次)就可以了.(或者利用stutio更改索引的stroage),重新建立的索引会在分区上,而L_Monitoring_SwitchOut的索引也是在分区后建立的,所以索引也存在分区上的.这样,2个表的结构才一模一样了,可以swtich了!
没代码和脚本,全文字,慢慢看吧,希望大家有帮助.
关键字:分区 delete 数据 卡死 分区表
ALTER TABLE SWITCH' statement failed. The table x' is partitioned while index 'x' is not partitioned.的更多相关文章
- 消息 4900,级别 16,状态 2,第 1 行 对表 'XX.XXX' 执行 ALTER TABLE SWITCH 语句失败。对于已启用更改跟踪的表,不可能切换其分区。请先禁用更改跟踪,再使用 ALTER TABLE SWITCH。
问题描述: 今天处理切换分区数据的时候出现了这个错误: 消息 4900,级别 16,状态 2,第 1 行 对表 'XX.XXX' 执行 ALTER TABLE SWITCH 语句失败.对于已启用更改跟 ...
- 'ALTER TABLE SWITCH' 语句失败。表'MGXXX.dbo.user_XXX' 已分区,但 索引'ix_user_XXX_user_id' 未分区。
问题描述: 今天在做分区切换的时候把旧log数据切到clear表,遇到了这个问题,顺便做下笔记记录一下解决方法 'ALTER TABLE SWITCH' 语句失败.表'MGXXX.dbo.user_X ...
- 【Oracle】ORA-55610: Invalid DDL statement on history-tracked table
—删除表emp1时出现问题 SCOTT@GOOD> drop table emp1; drop table emp1 * ERROR at line 1: ORA-55610: Invalid ...
- Nodes “-1” are listed in ADOP_VALID_NODES table but not in FND_NODES table
While trying to apply patches to upgrade to 12.2.4, adop failed due to the below errors. Validating ...
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
先上代码 <script type="text/javascript" language="javascript"> var idTmr; ...
- mysql切换数据库提示警告:Reading table information for completion of table and column names
登录数据库后,选择数据库时发现以下提示, mysql> use testReading table information for completion of table and column ...
- alter system switch logfile与alter system archive log current的区别
以前知道 ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换, ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例 ...
- Truncate table、Delete与Drop table的区别
Truncate table.Delete与Drop table的区别 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNC ...
- table完美css样式,table的基本样式,table样式
table完美css样式,table的基本样式,table样式 >>>>>>>>>>>>>>>>> ...
随机推荐
- 手动添加 Git bash 到鼠标右键
由于不知原因,右键没有了Git Bash Here,没有这个右键菜单导致获取Git仓库中的代码很不方便,所以决定通过注册表的方式将这个菜单加出来. 1.win + R,输入"regedit& ...
- unserialize() [function.unserialize]: Error at offset
$a = 'a:1:{i:0;s:12:"1,10,93,";}'; var_dump( unserialize( $a ) ); 运行之后页面上显示Notice: unseria ...
- Html事件冒泡
原以为span不同于input,事件冒泡会被父级标签吞噬,写了个测试事件冒泡的Demo,发现并不是想得那样.另外:event.stopPropagation()以及event.stopImmediat ...
- Python自学笔记-关于切片(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 切片 L[0: ...
- 发布系统Git使用指南 - the Git Way to Use Git
发布系统Git使用指南 --the Git Way to Use Git 背景 有文章曾归纳,Git是一套内容寻址文件系统,意思是,Git的核心是存储键值对^[1]^.显然,这样的形式不利于普通人 ...
- JavaScript实现常见算法面试题
算法题目部分参照了<进军硅谷>这本书. github:https://github.com/qcer/Algo-Practice (如果你觉得有帮助,记得给个star,THS) 一.排序 ...
- marked插件在线实时解析markdown的web小工具
访问地址: https://mdrush.herokuapp.com/ github项目: https://github.com/qcer/MDRush 实现简介: 1.动态数据绑定 借助Vuejs, ...
- Bash : test 命令
在 Bash 脚本中我们一般会使用 test 命令来进行条件检查.test 命令的返回值为 0 或 1.0 表示 true, 1 表示 false.简单起见,我们可以直接认为 test 的结果为 tr ...
- (10.11)Java第一小步
在度过大一和大二浑浑噩噩的咸鱼生活之后,我决定 开始为自己的未来负责,开始学习自己喜欢的Java,同时决定以这篇博客来开启自己的博客之旅和Jaca的学习之路. 以后我也会陆续在博客园更新自己的博客,记 ...
- EF6与Mysql疑难问题记录
这几天公司架构调整,新的迭代后端使用了ABP框架与CodeFirst模式,执行过程中遇到了一个非必现很难定位的问题,特此记录. 现象 在程序访问MySql数据库时报了异常 System.Invalid ...