DB2删除表分区
近日,由于部门数据库读库空间过小,提出删除掉两个月之前日志表的分区(数据库分区是按时间月分区),记述如下:
上网搜索资料发现删除表分区大概分这么几步:
1、查询需要删除掉的分区:
select t.DATAPARTITIONNAME from syscat.datapartitions t where tabname = '?' with ur
syscat.datapartitions表存放所有的分区,根据表名时间查询出所要删除的分区名。
2、detach分区到一张临时表(该操作会创建临时表,临时表已存在会报错),detach是分离分区的意思:
alter table 表名 detach partition 分区名 into table 临时表名;
3、最后再drop掉临时表。
然后我就代码:
1)据时间、表名查出要删除的分区名,存在list;
2)遍历这个list,循环中先detach分区,再删除临时表。
PS:问题来了,测试中发现drop临时表的时候会报错,报该临时表有分区数据再往里面迁,这里我就怀疑detach操作是异步的了,上网一看相关资料,果不其然。
原来detach操作会先将syscat.datapartitions表中的分区改名,但是所属表名不会改,然后将status状态打为L,表明该分区正在迁移中。
于是我代码先根据表名判断存不存在status为L的数据,没有再进行删表,本地测试成功,批量删除分区成功。然而一放到测试环境,测试人员反馈说报错,又是删表出错,这时候奇怪了,不是判断过状态L了吗,而且本地是可以的,纠结了好久!!!最后想通了,detach既然是异步的,那么打上这个L状态也是异步的了,还没打我后续代码就开心的来判断L状态进行删表了。。。幹!!!那搞这个状态有个屁用。
后面我给了两种方案:
1、设置休眠 Thread.sleep(),由于这个时间不好把控,而且我们库表都是有很多分表的,粗粗估计了下,要删除的分区大概是3张总表*72张分表*40个分区,每个停个100毫秒就耗时很大了,故此方案pass。(不考虑用线程并发,因为DBA不允许。。)
2、递归删表 直至成功
public void drop(表名){
try{
删表操作
}catch(Exception e){
drop();
}
}
其实第二种方法是可行的,没办法,代码评审被否掉,于是给了第三种方案:
3、搞两个定时任务
1)先detach分区 分离到拼接的临时表:tmp+表名+分区名,然后新建一张表,存这些被分离的临时表名字,这张表有三个字段:临时表名、状态(删除,未删除)、更新时间
2)然后过段时间,去做删除临时表操作,删完将临删除状态更新为已删除,做了个查询功能监控待删除这张表。
DB2删除表分区的更多相关文章
- Oracle 删除表分区
删除表分区(drop partition) 删除表分区包含两种操作,分别是: Ø 删除分区:alter table [tbname] drop partition [ptname] UPDA ...
- db2删除表中数据
DB2数据库系统建表后,难免会有将表中数据清空的需求,本文将为您介绍DB2数据库中四种数据删除的方法,供您参考,您可以根据实际情况来进行选择,希望能对有所帮助. 1. 使用 DELETE 语句,即: ...
- sqlserver 删除表分区
我们都知道,SQL server2008R2企业版以及一些其它的版本支持分区函数,当你在这些数据库备份后想在一些不支持分区函数的数据库做还原时,就会失败. 下面我们来解决这个问题. 1.备份数据库!备 ...
- DB2表分区删除
近日,由于部门数据库读库空间过小,提出删除掉两个月之前日志表的分区(数据库分区是按时间月分区),记述如下: 上网搜索资料发现删除表分区大概分这么几步: 1.查询需要删除掉的分区: select t.D ...
- Oracle-13:Oracle中的表分区
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客记录了表分区 表分区的含义: 典型的拿空间换时间的案例! 表分区对一张表进行分区,分区之后表中的数据存 ...
- 创建,增加,删除mysql表分区
1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles ( emp_no INT NOT NULL, titl ...
- MySQL-如何删除hash表分区
一个大表,之前是以hash分区表的形式存在的, MySQL> show create table history_uint; | history_uint | CREATE TABLE `his ...
- 查询/删除/建立DB2数据表的主键
一.查询表主键. describe indexes for table <instancename>.<tablename> 例: describe indexes for t ...
- DB2 建表,添加字段,删除字段,修改字段等常用操作
转载:http://blog.sina.com.cn/s/blog_67aaf4440100v01p.html,稍作修改. --创建数据库 create database Etp; --连接数据库 c ...
随机推荐
- Ubuntu 16.04安装MongoDB的GUI工具RoboMongo
一.下载: https://robomongo.org/download 离线版本:(链接: https://pan.baidu.com/s/1mirFi56 密码: y3t2) 二.安装: -lin ...
- Java中ArrayList的初始容量和容量分配
1.实例化ArrayList时默认不输入大小是10个,并且如果增加到11个时不会报错,会自动扩容. 2.获取指定索引的值时就必须保证ArrayList有这么多个. 3.推荐在new ArrayList ...
- Apple激活日期查询
需要输入的信息为苹果产品的序列号 查看您的保修服务和支持期限 - Apple 支持 或者通过果粉查询网站获取结果
- Objective-C 协议(protocol)二
我们前面提到了OOP的继承,我们说Objective-C不像C++可以有多重继承,Objective-C是单一继承的,如果想要做到一个类别同时拥有多种型别的能力,我们就可以通过协议来实现.Object ...
- 【Protocol Buffers】grpc默认使用的Google 开源的一套成熟的结构数据序列化机制
grpc默认使用的Google 开源的一套成熟的结构数据序列化机制 参考地址:https://blog.csdn.net/shensky711/article/details/69696392 参考地 ...
- Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
有时候我们刚进入 Intellij IDEA时会出现这样一个情况,原因是IDEA没有找到spring的配置文件,我们需要添加spring文件给idea管理 参考: 1.https://www.jetb ...
- socket阻塞与非阻塞,同步与异步I/O模型
作者:huangguisu 原文出处:http://blog.csdn.NET/hguisu/article/details/7453390 socket阻塞与非阻塞,同步与异步 1. 概念理解 在进 ...
- elasticsearch 最佳实践
创建索引 无mapping 创建索引名称为index的索引 curl -XPUT http://localhost:9200/book 有mapping 如果需要定义每个类型的结构映射,创建type名 ...
- scala使用FunSpec进行单元测试报错
遇到比较奇怪的问题,mvn项目中的main函数可以正常运行,但是test阶段出错,报错信息如下: Exception in thread "main" java.lang.NoCl ...
- ffmpeg h264编码 extradata 为空
ffmpeg h264编码的例子前面的文章已经介绍,本来主要讲述影响AVCodecContext extradata是否为 空的配置项.如果要求open编码器以后AVCodecContext extr ...