精华内容
下载资源
问答
  • DB2删除表分区

    2016-09-30 15:08:00
    近日,由于部门数据库读库空间过小... 上网搜索资料发现删除表分区大概分这么几步: 1、查询需要删除掉的分区: select t.DATAPARTITIONNAME from syscat.datapartitions t where tabname = '?' with ur syscat....

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

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

         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)然后过段时间,去做删除临时表操作,删完将临删除状态更新为已删除,做了个查询功能监控待删除这张表。

      

         

     

    转载于:https://www.cnblogs.com/jianwei-dai/p/5923850.html

    展开全文
  • db2表分区删除

    千次阅读 2018-07-20 16:03:39
    1.常规方法 delete 查询条件 1.1.删除效率较慢 1.2.经常确认归档日志是否...2.1.detach到临时 db2 "alter table T_PERFORM detach partition PART221 into table perform_PART221"; 2.2.删除临时...

    1.常规方法

    delete 查询条件

    1.1.删除效率较慢

    1.2.经常确认归档日志是否占满

    1.3.大的事务长期没有提交容易导致活动日志压力过大

    2.detach效率较高

    2.1.detach到临时表

    db2  "alter table T_PERFORM detach partition PART221 into table perform_PART221";

    2.2.删除临时表

    db2 drop  tableperform_PART221;

    展开全文
  • 1.数据库版本 ...DROP PROCEDURE DB2USER.TOOLS_PARTITION_TABLE_SHOW (VARCHAR ()); CREATE OR REPLACE PROCEDURE Tools_partition_table_show(IN ETL_DATE VARCHAR(8)) /*****************...

    1.数据库版本

    2.具体procedure

    DROP PROCEDURE DB2USER.TOOLS_PARTITION_TABLE_SHOW (VARCHAR ());
    
    CREATE OR REPLACE PROCEDURE Tools_partition_table_show(IN ETL_DATE VARCHAR(8))
      /******************************************************************************
         NAME:
         PURPOSE:
      
         REVISIONS:
         Ver        Date        Author        Description
         ---------  ----------  ------------  ------------------------------------
         1.0        2015-07-22  Zen        1. 作为分区表添加和快速删除分区的一个示例
                                               供有相同需求的脚本参考。
      ******************************************************************************/
      LANGUAGE SQL
    BEGIN
      DECLARE V_LOCATION VARCHAR(100);
      DECLARE V_START_TIME TIMESTAMP;
      DECLARE V_SQLMSG VARCHAR(255);
      DECLARE V_CNT INT;
      DECLARE V_PARTITION_NAME VARCHAR(50);
      DECLARE V_PARTITION_END VARCHAR(50);
      DECLARE EXIT HANDLER FOR SQLEXCEPTION                                                                                        
       BEGIN                                                                                                                     
          GET DIAGNOSTICS EXCEPTION 1 V_SQLMSG = MESSAGE_TEXT;                                                                      
          CALL DB2USER.PRO_LOG(ETL_DATE,'Tools_partition_table_show','测试分区表作业方式',V_START_TIME,current timestamp,'ERROR',V_LOCATION,V_SQLMSG);                                                                            
      END;
      /*清空目标表*/ 
      SET V_START_TIME = current timestamp;
      SET V_LOCATION = '清空数据';
      
      /*
      DELETE FROM DB2USER.S_CLM_RATE_POL_AAA WHERE BBQ = SUBSTR(ETL_DATE,1,6);
      
      COMMIT;*/
      SET V_LOCATION = '测试保单赔率表的抽取开始';
      SET V_PARTITION_NAME = 'P'||SUBSTR(ETL_DATE,1,6);
      SET V_PARTITION_END = TO_CHAR(add_months(TO_DATE(ETL_DATE,'YYYYMMDD'),1),'YYYYMM');
      
      --SELECT TO_CHAR(add_months(TO_DATE(ETL_DATE,'YYYYMMDD'),1),'YYYYMM') INTO V_PARTITION_END FROM sysibm.dual;
      
      --判断分区是否存在,如果存在,数据转出删除
      SELECT COUNT(*) INTO V_CNT FROM syscat.datapartitions t 
        WHERE tabschema='DB2USER' 
        AND tabname='S_CLM_RATE_POL_AAA_TEST'
        AND datapartitionname=V_PARTITION_NAME ;
      
      IF V_CNT=1 THEN     
          -- 分区数据转出
          EXECUTE IMMEDIATE 'ALTER TABLE S_CLM_RATE_POL_AAA_test DETACH PARTITION '||V_PARTITION_NAME||' INTO DB2USER.TEMP_S_CLM_RATE_POL_AAA';
          COMMIT;
          EXECUTE IMMEDIATE 'DROP TABLE DB2USER.TEMP_S_CLM_RATE_POL_AAA';
      END IF ;
      
      SET V_LOCATION = 'after 分区数据转出';
      
      --非正常DML或DDL 需要调用 sysproc.admin_cmd();
      --收集统计信息
      CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE db2user.S_CLM_RATE_POL_AAA_test');
      
      -- 添加新分区
      EXECUTE IMMEDIATE 'ALTER  TABLE  DB2USER.S_CLM_RATE_POL_AAA_test ADD PARTITION '||V_PARTITION_NAME||' STARTING '||SUBSTR(ETL_DATE,1,6)||' INCLUSIVE ENDING '||V_PARTITION_END||' exclusive';
      
      SET V_LOCATION = 'after 添加新分区';
      COMMIT;
      
      EXECUTE IMMEDIATE 'ALTER TABLE DB2USER.S_CLM_RATE_POL_AAA_test ACTIVATE  NOT  LOGGED  INITIALLY';
      
      FOR REC AS WITH TMP(TYPE) AS (SELECT 'AAA1' AS TYPE FROM SYSIBM.DUAL
                              UNION ALL
                              SELECT 'AAA2' AS TYPE  FROM SYSIBM.DUAL
                              UNION ALL
                              SELECT 'AAA4' AS TYPE  FROM SYSIBM.DUAL)
                   SELECT * FROM TMP
       DO
       SET V_LOCATION = 'test'||REC.TYPE;
       
       INSERT INTO DB2USER.S_CLM_RATE_POL_AAA_test
       SELECT
          ......END FOR;
       
      CALL DB2USER.PRO_LOG(ETL_DATE,'Tools_partition_table_show','测试分区表作业方式',V_START_TIME,current timestamp,'SUCCESS','','');
    END;

    3.总结:

    a.db2 中表分区目前只支持range分区,没有oracle的丰富。

    b.分区不能直接删除必须先 DETACH PARTITION ,detach之后必须commit不然会报结构不完善的错误。

    c.需要添加新的分区只需要直接 ADD partition。

    d.DDL语句用在procedure中需要显示commit。

     

    转载于:https://www.cnblogs.com/Alex-Zeng/p/4719210.html

    展开全文
  • 时间:2018年7月5日背景:对某个分区表清理6个月的数据DB2工程师建议:在对分区表进行detach,进而drop table后,无需再删除索引、重建索引,这是因为自从版本V9.7之后,在detach分区时,该分区索引自动也detach了,...

    时间:2018年7月5日

    背景:对某个分区表清理6个月的数据

    DB2工程师建议:在对分区表进行detach,进而drop table后,无需再删除索引、重建索引,这是因为自从版本V9.7之后,在detach分区时,该分区索引自动也detach了,因此,在drop table的时候其实也在同步删除索引。detach分区时,索引也从分区索引中同步detach,这样数据和索引都detach后存放到同一个表中。

    展开全文
  • db2删除分区

    千次阅读 2011-12-05 10:19:20
    今天给系统中一个新增了一个分区: alter table t_hzc_gxsjdxmx_jg add partition T_HZC_GXSJDXMX_JG_20110103 STARTING FROM ('2011-01-03') INCLUSIVE ENDING AT ('2011-01-04') EXCLUSIVE IN HIS_DATA; 后来...
  • db2 增加删除分区

    千次阅读 2014-08-30 10:54:28
    由于在项目中在delete许多大表的数据,起初...修改大表的建表语句,使之变成分区表,然后进行detach把分区数据到临时表中,删除临时表,这个就达到删除数据目的了,下面我列出具体的操作步骤及相应的shell脚本。 1
  • 在使用分区表时,会经常对分区表进行操作,包括删除分区、增加分区、 1、
  • DB2 分区特性

    2019-01-22 16:43:52
    简介 在数据仓库中,事实或历史的大小是摆在设计人员和管理员面前的一个挑战。这些通常包含数亿行数据,有时候甚至包含数千亿行数据。...DB2 9 for Linux, UNIX, and Windows 中一个重要的增强是...
  • db2 分区特性转载

    2008-12-30 19:11:49
    在数据仓库中,事实或历史的大小是摆在设计人员和管理...每月或每个季度删除大量过时的数据 随着时间的推移,DB2 继续添加和增强特性,以解决这些需求。DB2 9 for Linux, UNIX, and Windows 中一个重要的增强是...
  • db2数据库入门教程(官方中文版)

    千次下载 热门讨论 2010-10-20 13:30:33
    2.2.1数据库分区............................................................................................................23 2.2.2连接集中器(Connection Concentrator ).................................
  • db2数据库入门官方教程(中文版)

    热门讨论 2013-05-02 14:48:46
    2.2.1数据库分区............................................................................................................23 2.2.2连接集中器(Connection Concentrator ).................................
  • 20120711讲座预告

    2012-07-01 21:13:33
    鉴于CSDN无故删除博文,本博客不再更新,暂时迁至http://www.db365.net 商业智能群199567325,2012年7月11号《db2数据库逻辑设计》,讲解者:赵坚密Jimmy。 ...7月11日Jimmy与您相约在晚8:30...3、表分区 4、DPF
  • db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器。收费 大型企业 Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时...
  • sql2005教程

    2014-04-04 14:12:11
    SQLSERVER2005中分区表的设计 安装SQL Server 2005 时报“-2146233087”错误的解决办法 将Excel表导入到SQL Server 2005 的DB 中文系统上重装SQL Server 2005 英文版的问题 (转)使用公用表表达式的递归查询(SQL...
  • 不管您选择连接哪个数据库,例如MySQL,Firebird,MS Access,PostgreSQL,SQLite或DB2,该应用程序都支持多个连接,因此您可以轻松地管理和组织,视图,触发器和过程。 首次启动DBeaver Portable时,可以选择一...
  • 经典SQL语句大全

    热门讨论 2014-12-20 12:00:30
    10、说明:两张关联删除中已经在副中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、说明:四联查问题: select * from a left ...
  • Oracle数据库学习指南

    2012-07-04 22:12:40
    30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35.外部联接的用法 36.性能调试的一般问题 37.优化 38...
  • 10、说明:两张关联删除中已经在副中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、说明:四联查问题: select * from a left ...
  • sql经典语句一部分

    2011-07-31 11:16:50
    10、说明:两张关联删除中已经在副中没有的信息 delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 11、说明:四联查问题: select * from a left ...
  • 2.4.1 按要求创建分区 23 2.4.2 网络设置 26 2.4.3 时区选择 28 2.4.4 root账号配置 28 2.4.5 验证 29 2.4.6 使用 NIS 或 NIS+ 30 2.4.7 程序包选择 30 2.4.8 X Window 安装 32 2.4.9 程序包安装 34 2.4.10 Linux...
  • SHA1:339A24E2A1ACDEE012BA63B165DB2BC1E3455871 CRC32:9A768F7F 大名鼎鼎的Sysinternals工具都应该听说过吧,比较有名的有Process Explorer、TCPView、Autoruns、Filemon、PsTools等。这次发的是这一系列实用...
  • 使用 NTFS 分区 128 安装和配置简单网络管理协议 (SNMP) 服务 128 受信任的服务器配置 129 保护数据存储 129 Microsoft Access 129 Microsoft SQL Server 129 Microsoft SQL Server 2005 Express Edition 130 Oracle...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

db2删除分区表分区