`

删除自动分区的存储过程

SQL 
阅读更多

 我们设计了一个自动分区的超级大表,分区采用以时间分区的方式,结果数据爆掉了,没办法必须删除其中比较早的分区数据,我设计了一个存储过程完成这个过程,

 

  

create or replace procedure ICE_Drop_PARTITIONS(dateBefore in Date, tableName in varchar2) as
       partitionName varchar2(20);
       v_sql   varchar2(1024);
       temp    varchar2(1024);
       temp_D    date;
       v_temp   varchar2(1024);      
       v_cs    varchar2(1024);
       v_error varchar2(1024);
        CURSOR cur_partition IS
              select t.partition_name,t.high_value  from user_tab_partitions t where t.table_name=tableName  order by t.last_analyzed desc;
  
begin
    for for_partition in cur_partition loop
     begin
        v_temp := 'select to_char('||for_partition.high_value||',''yyyy-MM-dd'') from dual';
        execute immediate v_temp into temp ;
        select to_date(temp,'yyyy-mm-dd') into temp_D from dual; 
        if (temp_D<dateBefore)    then
        v_sql := 'alter table '||tableName||' truncate partition ' ||for_partition.partition_name;
        Dbms_Output.put_line(v_sql);        
        execute immediate v_sql;
        commit;
        end if;
        end;
        end loop;
    close cur_partition;
    exception when others then
      v_error := sqlcode || ' - ' || sqlerrm;
      dbms_output.put_line(v_error);
      rollback;
end ICE_Drop_PARTITIONS;

 

dateBefore in Date, tableName in varchar2

这两个参数分别是,

dateBefore :删除几号以前的数据,

tableName :分区所在的表

 

其中用到了游标:

   CURSOR cur_partition IS
              select t.partition_name,t.high_value  from user_tab_partitions t where t.table_name=tableName  order by t.last_analyzed desc;
这个是遍历user_tab_partitions ,找到指定表名的所有分区,

 

v_temp := 'select to_char('||for_partition.high_value||',''yyyy-MM-dd'') from dual';
        execute immediate v_temp into temp ;
        select to_date(temp,'yyyy-mm-dd') into temp_D from dual; 
       

这个是找到分区的条件,实质就是for_partition.high_value就是一个

写道
TO_DATE(' 2010-06-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

 

类似这种的存在,他是一个long型,所以把它转化为date,后面就是比较日期,

 v_sql := 'alter table '||tableName||' truncate partition ' ||for_partition.partition_name;
        Dbms_Output.put_line(v_sql);        
        execute immediate v_sql;
       

 这就是最后删除分区的代码...

分享到:
评论

相关推荐

    oracle10g分区表自动按时间创建删除分区存储过程

    文件是本人oracle10g分区表自动按时间创建、删除分区的存储过程,测试代码,通过job调用存储过程,每天午夜12点运行一次。妥妥!跟大家分享下!

    MySQL分区表自动创建及删除存储过程

    在这个特定的存储过程中,可能包括了根据某些条件(如时间、ID范围等)自动为表创建分区的逻辑,以及当不再需要某些分区时,自动删除这些分区的逻辑。这在处理大量历史数据时尤其有用,例如,可以定期清理过期的数据...

    mysql实现自动创建与删除分区

    本文将深入探讨如何实现MySQL的自动创建与删除分区,主要关注时间分区,并介绍相关存储过程和事件的设置。 首先,我们需要理解MySQL分区的概念。分区是将一个大表逻辑上划分为多个较小的部分,每个部分称为一个分区...

    Oracle 分区表自动维护脚本

    4. 创建一个存储过程`P_PART_T_MAINTENANCE`,这个存储过程定义了一系列的维护操作逻辑: - 定义一个游标`C_TNAME`,用于选择需要维护的分区表和它们的保留期限。 - 使用循环遍历游标中的每个分区表,根据保留期限...

    kafka_topic创建、分区、删除管理

    本文将深入探讨如何管理和操作Kafka的Topic,包括创建、查看、分区以及删除等核心概念。 **创建Topic** 在Kafka中,创建Topic通常通过配置文件或者Kafka自带的命令行工具`kafka-topics.sh`进行。例如,要创建一个名...

    oracle自动一年建立表分区.zip

    3. **编写SQL脚本**:创建一个PL/SQL过程,该过程接受当前日期,计算一年前的日期,并为这些日期创建相应的分区。 4. **调度任务**:使用Oracle的DBMS_SCHEDULER或者以前的DBMS_JOB来定期运行这个脚本,确保每年或每...

    DB2存储过程表空间sql专题

    DB2存储过程、表空间与SQL是数据库管理中的核心概念,尤其在企业级数据库应用中,它们的重要性不言而喻。DB2作为IBM推出的关系型数据库管理系统,广泛应用于金融、电信等关键领域。本专题旨在深入探讨DB2中存储过程...

    UDiskDel删除U盘隐藏分区

    此外,这个过程是不可逆的,一旦删除隐藏分区,其中的数据将永久丢失。因此,在操作前务必备份重要数据,以免造成不可挽回的损失。 总的来说,"UDiskDel删除U盘隐藏分区"是一款实用工具,专为那些不再需要U盘启动...

    PKG_ADD_PART_NEW4.zip_Oracle partition_oracle_自动创建分区表脚本

    描述中提到的"自动创建分区表存储过程",是Oracle数据库中用于自动化创建分区表的一种方法。存储过程是一组预编译的SQL语句和PL/SQL代码,可以作为一个单元执行,提高了代码的重用性和效率。在这个特定的情况下,...

    ORACLE表自动按月分区步骤

    总结来说,Oracle表按月自动分区通过创建分区函数、定义分区策略、启用自动分区,并结合Java编程接口,可以有效提升大数据量表的管理效率和查询性能。理解并熟练掌握这些步骤对数据库管理员和Java开发人员至关重要,...

    基于 ODBC 自动存储自动定期删除数据库记录.zip

    本教程将深入探讨如何利用ODBC实现自动存储数据并设定定时删除策略,以优化数据库性能和管理。 首先,了解ODBC的工作原理至关重要。ODBC是一个中间层,它提供了一个统一的API(应用程序编程接口),让应用程序可以...

    oracle分区表分区索引.docx

    需要注意的是,Oracle 不会自动维护全局分区索引,当我们在对表的分区做修改之后(如对分区作 move,truncate,drop),如果对分区进行维护操作时不加上 update global indexes,通常会导致全局索引的INVALDED,必须在...

    AndroidQ(10)分区存储完美适配方法

    Android Q(10)分区存储完美适配方法 Android Q(10)分区存储完美适配方法是指在 Android Q(10)系统中,实现分区存储的完美适配方法。该方法主要通过示例代码介绍了 Android Q(10)分区存储的实现要点,包括...

    自动存储管理

    例如,添加磁盘只需DBA向现有磁盘组发出请求,ASM会自动在线重新平衡存储,而删除磁盘则只需要发出删除命令,ASM会在Oracle确认操作完成后自动从操作系统中删除磁盘。对于I/O性能的调整,ASM允许动态在线存储重新...

    asp 到期自动删除到期自动删除

    6. **错误处理**:在实现过程中,应考虑异常情况和错误处理,比如数据库连接失败、资源删除失败等,确保系统的稳定性和数据的一致性。 7. **日志记录**:为了追踪和审计,可以记录每次删除操作,包括删除的资源ID、...

    全面学习分区表及分区索引

    1. 添加/删除分区:随着数据的增长,可能需要动态添加或删除分区。 2. 重组分区:调整数据分布,如合并或拆分分区,以优化性能。 3. 重建索引:定期进行索引维护,如重新构建或优化,以保持索引效率。 4. 分区交换:...

    关于IBM隐藏分区的删除和制作

    2. 在使用恢复光盘之前,请先将目前存储在硬盘主分区上的个人重要数据备份在外置的介质中或服务器上。 3. 在恢复过程中,可能需要重新安装一些软件和驱动程序。 IBM隐藏分区的删除和制作需要注意许多细节,需要用户...

    8148 8168制作SD分区的教程

    对于初学者而言,自动分区脚本不仅简化了分区过程,还降低了出错的可能性。同时,了解手动分区的基本原理对于解决特殊情况下的问题也非常有帮助。无论是手动还是自动分区,都需要注意操作时的安全性,确保不会因为误...

Global site tag (gtag.js) - Google Analytics