【新炬网络名师大讲堂】Oracle 12C一个实用的新特性介绍:drop/truncate多个子分区...

        今年年初时候,局方人员反应数据网管系统WAP话单报表查询非常缓慢,经我们分析了下,发现是由于业务表查询条件没有建索引导致全表扫描。该表是一个大分区表,大约有350G的数据量,按每小时进行分区,保留了大概一个星期多的历史记录,经和局方、开发商一起商量后,决定清理掉一部分没用的数据,以方便新建索引,减少影响业务的时间。于是就写了个脚本,里面的

        大概内容就是:

        ALTER TABLE ULTRANMS.UC_WAP_PULL_QUERYLOG TRUNCATE PARTITION P_20121231000000;
        ALTER TABLE ULTRANMS.UC_WAP_PULL_QUERYLOG TRUNCATE PARTITION P_20121231010000;
        ……
        ALTER TABLE ULTRANMS.UC_WAP_PULL_QUERYLOG TRUNCATE PARTITION P_20130104220000;

        一共需要TRUNCATE掉119个子分区,由于每执行一个SQL语句就需要经历语法语义检查、编译生成执行计划消耗一些系统资源,所以连续执行这119个SQL语句对数据库的性能是一个不小的冲击,记得当时就在想:Oracle对这种大批量操作怎么就没有搞出一种高效的方法呢。

        在参加OOW介绍新特性的时候发现,Oracle 12C已经可以实现使用单独一条SQL语句对子分区进行维护操作了。
        例如range_sales表有7个子分区,
        CREATE TABLE range_sales
        ( prod_id NUMBER(6)
        , cust_id NUMBER
        , time_id DATE
        , quantity_sold NUMBER(3)
        , amount_sold NUMBER(10,2)
         )
        PARTITION BY RANGE (time_id)
        (PARTITION SALES_Q2_2011 VALUES LESS THAN (TO_DATE(’01-APR-2011′,’DD-MON-YYYY’)),
         PARTITION SALES_Q3_2011 VALUES LESS THAN (TO_DATE(’01-OCT-2011′,’DD-MON-YYYY’)),
         PARTITION SALES_Q4_2011 VALUES LESS THAN (TO_DATE(’01-JAN-2012′,’DD-MON-YYYY’)),
         PARTITION SALES_Q1_2012 VALUES LESS THAN (TO_DATE(’01-APR-2012′,’DD-MON-YYYY’)),
         PARTITION SALES_Q2_2012 VALUES LESS THAN (TO_DATE(’01-JUL-2012′,’DD-MON-YYYY’)),
         PARTITION SALES_Q3_2012 VALUES LESS THAN (TO_DATE(’01-OCT-2012′,’DD-MON-YYYY’)),
         PARTITION SALES_Q4_2012 VALUES LESS THAN (MAXVALUE));

        现在需要对SALES_Q2_2011, SALES_Q3_2011, SALES_Q4_2011这3个子分区进行TRUNCATE操作,可以直接在一条SQL语句中单独实现:
        ALTER TABLE range_sales TRUNCATE PARTITIONS SALES_Q2_2011, SALES_Q3_2011, SALES_Q4_2011;
        新特性固然好,但是也需要慎重考虑做足测试功夫才行,如对上述数据网管大分区表是在12C数据库中进行操作的时候,可以考虑尝试在一条单独的SQL语句中进行小批量进行,如每条SQL语句TRUNCATE 20个子分区表,防止如此大的DDL操作过程导致数据库出现问题等。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29960155/viewspace-1363548/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29960155/viewspace-1363548/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值