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表分区删除的更多相关文章
- DB2删除表分区
近日,由于部门数据库读库空间过小,提出删除掉两个月之前日志表的分区(数据库分区是按时间月分区),记述如下: 上网搜索资料发现删除表分区大概分这么几步: 1.查询需要删除掉的分区: select t.D ...
- Oracle 删除表分区
删除表分区(drop partition) 删除表分区包含两种操作,分别是: Ø 删除分区:alter table [tbname] drop partition [ptname] UPDA ...
- MySQL-如何删除hash表分区
一个大表,之前是以hash分区表的形式存在的, MySQL> show create table history_uint; | history_uint | CREATE TABLE `his ...
- DB2 表空间和缓冲池
简介 对于刚涉足 DB2 领域的 DBA 或未来的 DBA 而言,新数据库的设计和性能选择可能会很令人困惑.在本文中,我们将讨论 DBA 要做出重要选择的两个方面:表空间和缓冲池.表空间和缓冲池的设计 ...
- SQL Server表分区
什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...
- sql表分区
1.单表达多少条数据后需要分区呢? a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理: b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...
- Oracle10g 表分区
1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...
- oracle表分区以及普表转分区表(转)
概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...
- Mysql 表分区
是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...
随机推荐
- Vim ide for shell development
Source : This article is part of the ongoing Vi / Vim Tips and Tricks Series. As a Linux sysadmin or ...
- mvc路由注意事项
路由表中你增加的路由顺序是很重要的.我们自定义路由是增加在默认路由之前的. 假如你搞反了,那默认路由将永远替代调用自定义路由.
- js鲸鱼
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- java 使用 poi 解析excel
背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...
- Web Project犯错误!
创建一个Web Project关于数据库连接,输入doGet中调用req.setCharacterEncoding("utf-8)错误输成uft-8 经常忘记HttpServletReque ...
- IAP的几个问题
IAP是(In-APP Purchase),苹果商店内购.先来看看它的流程: 而实际运营过程中,经常会遇到这二个问题: 只要应用玩的人比较多,基本上都会遇到过此类问题,下面是来自搜索引擎的结果: ...
- CSS3 border-image详解、应用
一.border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人.可惜目前支持的浏览器有限,仅Firefox3.5,chrom ...
- RCNN 和SPPnet的对比
一.RCNN: 1.首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口. 2.把这2k个候选窗口的图片都缩放到227*227,然后分别输入CNN中,每个候选窗台提取出一个特征向量,也就是说 ...
- WebClient与WebRequest差异
WebRequst的使用 WebClient和HttpWebRequst是用来获取数据的2种方式,在我的这篇数据访问(2)中主要是讲的WebClient的使用,一般而言,WebClient更倾向于“按 ...
- TBB 学习笔记
#include <tbb/task_scheduler_init.h> #include <tbb/blocked_range.h> #include <tbb/par ...