近日,由于部门数据库读库空间过小,提出删除掉两个月之前日志表的分区(数据库分区是按时间月分区),记述如下:

上网搜索资料发现删除表分区大概分这么几步:

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表分区删除的更多相关文章

  1. DB2删除表分区

    近日,由于部门数据库读库空间过小,提出删除掉两个月之前日志表的分区(数据库分区是按时间月分区),记述如下: 上网搜索资料发现删除表分区大概分这么几步: 1.查询需要删除掉的分区: select t.D ...

  2. Oracle 删除表分区

    删除表分区(drop partition)    删除表分区包含两种操作,分别是:   Ø 删除分区:alter table [tbname] drop partition [ptname] UPDA ...

  3. MySQL-如何删除hash表分区

    一个大表,之前是以hash分区表的形式存在的, MySQL> show create table history_uint; | history_uint | CREATE TABLE `his ...

  4. DB2 表空间和缓冲池

    简介 对于刚涉足 DB2 领域的 DBA 或未来的 DBA 而言,新数据库的设计和性能选择可能会很令人困惑.在本文中,我们将讨论 DBA 要做出重要选择的两个方面:表空间和缓冲池.表空间和缓冲池的设计 ...

  5. SQL Server表分区

    什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...

  6. sql表分区

    1.单表达多少条数据后需要分区呢?   a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理:   b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...

  7. Oracle10g 表分区

    1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...

  8. oracle表分区以及普表转分区表(转)

    概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...

  9. Mysql 表分区

    是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...

随机推荐

  1. Vim ide for shell development

    Source : This article is part of the ongoing Vi / Vim Tips and Tricks Series. As a Linux sysadmin or ...

  2. mvc路由注意事项

    路由表中你增加的路由顺序是很重要的.我们自定义路由是增加在默认路由之前的. 假如你搞反了,那默认路由将永远替代调用自定义路由.

  3. js鲸鱼

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. java 使用 poi 解析excel

    背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护 ...

  5. Web Project犯错误!

    创建一个Web Project关于数据库连接,输入doGet中调用req.setCharacterEncoding("utf-8)错误输成uft-8 经常忘记HttpServletReque ...

  6. IAP的几个问题

    IAP是(In-APP Purchase),苹果商店内购.先来看看它的流程:   而实际运营过程中,经常会遇到这二个问题: 只要应用玩的人比较多,基本上都会遇到过此类问题,下面是来自搜索引擎的结果: ...

  7. CSS3 border-image详解、应用

    一.border-image的兼容性 border-image可以说是CSS3中的一员大将,将来一定会大放光彩,其应用潜力真的是非常的惊人.可惜目前支持的浏览器有限,仅Firefox3.5,chrom ...

  8. RCNN 和SPPnet的对比

    一.RCNN: 1.首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口. 2.把这2k个候选窗口的图片都缩放到227*227,然后分别输入CNN中,每个候选窗台提取出一个特征向量,也就是说 ...

  9. WebClient与WebRequest差异

    WebRequst的使用 WebClient和HttpWebRequst是用来获取数据的2种方式,在我的这篇数据访问(2)中主要是讲的WebClient的使用,一般而言,WebClient更倾向于“按 ...

  10. TBB 学习笔记

    #include <tbb/task_scheduler_init.h> #include <tbb/blocked_range.h> #include <tbb/par ...