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样式 >>>>>>>>>>>>>>>>> ...
随机推荐
- 苹果手机使用替代onkeyup的方法
今天项目有这个问题,苹果手机就不行 使用keyup事件检测文本框内容: $('#keyup_i').bind('keyup', function(){ $('#keyup_s') ...
- HDU2048 HDU2049 组合数系列 错排
HDU1465HDU2048HDU2049#include<cstdio> #include<cstdlib> #include<iostream> #includ ...
- 从开发到部署会用到的 Docker 命令
本文的目的是理解容器开发在目标环境中部署的端到端流程,并列出这些操作所需的 Docker 命令.如果有任何Docker问题,请移步到最新最热的技术社区 IT帮 itbang.me 提问,短信通知专家来 ...
- DevOps之服务手册
唠叨话 关于德语噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <DevOps服务手册(Manual)> <IT资源目标化>1.设施和设备(I ...
- python - 常用模块栗子
前言 内容摘自Python参考手册(第4版) 及 自己测试后得出.仅作为一个简单记录,方便使用查询之用. 另 dir(func)及func.__doc__可以查看对象属性及说明文档. 序列Seque ...
- Spring 源码剖析IOC容器(一)概览
目录 一.容器概述 二.核心类源码解读 三.模拟容器获取Bean ======================= 一.容器概述 spring IOC控制反转,又称为DI依赖注入:大体是先初始化bean ...
- (10.19)Java小作业
在java的学习过程中数组的版块也是十分重要的,包括一些教程也会在这个知识点花上更多的时间来讲解,足以证明 这个知识点的重要性,今天想和大家分享一道学习数组过程中不可避免的求最值题. 已知一个整形数组 ...
- 在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML
在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML 格雷戈里·拉森(Gregory Larsen),2017/08/02(第一次出版:2011 /11/09) 原文链接:http ...
- VS2010开发程序打包详解
VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...
- 【ASP.NET MVC 学习笔记】- 08 URL Routing
本文参考:http://www.cnblogs.com/willick/p/3343105.html 1.URL Routing告诉MVC如何正确的定位Controller和Action. 2.URL ...