`
sinianxue
  • 浏览: 18062 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

自动增加日分区表分区

阅读更多
CREATE OR REPLACE PROCEDURE PRC_ADD_PARTITION_DAY
 IS
  --/************************************************************************************
  -- 程序名称:    PRC_ADD_PARTITION_DAY
  -- 功能描述:    增加表日分区存储过程 
  -- 期达目的:    将此程序挂起  每次增加两个月的分区,每月执行一次
  -- 注意:       表分区里面切忌不要出现2个表空间 不然这个会有问题
  -- 输入参数:    'YYYYMM' - <作业的处理日期>
  -- 输出参数:    0 - <0为正常结束,其余为异常>
  -- 输入资源:
  -- 输出资源:
  -- 中间资源:    <用户名>.<中间表或视图等对象名>
  -- 创建人员:    XXX
  -- 创建日期:    20120726
  -- 版本说明:    V1.0
  -- 修改人员:    (针对程序的任何修改都需要记录修改人员)
  -- 修改日期:    (针对程序的任何修改都需要记录修改日期)
  -- 修改原因:    (针对程序的任何修改都需要记录修改原因,如果多次修改需依次记录)
  -- 版本说明:
  -- 执行说明:
  -- 公司名称:       
/************************************************************************************
  --执行MM月的数据,输入的日期参数为YYYY(MM+1)DD,如'20091201'则是执行11月份的数据。

  -- 编写规则说明
  -- 说明1:所有自定义变量均用小写,并以v_打头;所有字段名均用大写
  -- 说明2: 所有关键值均用大字;模式名、表名、函数名、存储过程名均用大写
  -- 说明3: 缩进同其它程序,里面的逻辑体比外面的逻辑体向有缩进一个TAB键。
  --        对齐主要是针对SQL语句,采用关键字换行和右对齐的方式(如果不方便也可使用左对齐。
  -- 说明4: SQL语句目标和源要齐整
  -- 说明5: 对每个表的数据作改变后都要显示的提交
  v_sql       VARCHAR2(10000) DEFAULT ''; -- 动态SQL变量,注意SQL长度
  v_prc       VARCHAR2(40);
  v_date      VARCHAR2(8);
  v_stepnum   NUMBER          DEFAULT 0;           -- 运行步骤
  v_errmsg    VARCHAR2(1024)  DEFAULT '正常';
  TYPE V_CURTYPE IS REF CURSOR;
  v_open_cur  V_CURTYPE;  -- 定义游标 循环迭代
  v_table_name VARCHAR2(40); -- 表名
  v_table_owner VARCHAR2(40); -- 用户名
  v_max_part_mon VARCHAR2(40); -- 已经存在在系统里面的最大日期
  v_tablespace_name VARCHAR2(40); -- 这个表分区的表空间
  v_max_next_mon VARCHAR2(40); -- 要拓展的表分区的日期
  v_max_next2_mon VARCHAR2(40);-- 要拓展的表分区的日期的下一天
  v_num NUMBER ;

BEGIN
  v_prc:='PRC_ADD_PARTITION_DAY';
  SELECT to_char(SYSDATE,'yyyymmdd') INTO v_date FROM  dual;
  --正文SQL处理

   -- 1 拿出需要拓展月分区的表的相关信息
   FOR v_num IN 1..63 
   LOOP 
       OPEN v_open_cur FOR
       'SELECT TABLE_NAME,TABLE_OWNER,MAX(SUBSTR(PARTITION_NAME,2,8)),TABLESPACE_NAME FROM ALL_TAB_PARTITIONS
       WHERE TABLE_OWNER=''XXX''
       --AND TABLE_NAME LIKE ''MD%'' --例如某一类以MD开头的表
       AND LENGTH(RTRIM(PARTITION_NAME))=9  AND table_name NOT LIKE ''%$%'' 
       GROUP BY TABLE_NAME,TABLE_OWNER,TABLESPACE_NAME';

      -- 开始把值赋给变量 准备循环迭代了
       LOOP
        FETCH v_open_cur INTO v_table_name,v_table_owner,v_max_part_mon,v_tablespace_name;
        EXIT WHEN v_open_cur%NOTFOUND;

         -- 把循环里面的最大day加1 作为下一个天 为开始拓展表分区做好准备
         SELECT to_char(to_date(v_max_part_mon,'YYYYMMDD')+1,'YYYYMMDD') INTO v_max_next_mon FROM DUAL;
         SELECT to_char(to_date(v_max_part_mon,'YYYYMMDD')+2,'YYYYMMDD') INTO v_max_next2_mon FROM DUAL;

         -- 开始拓展表空间
         v_stepnum :=v_stepnum+1;
         if (v_table_name!='D_CHN_G_CEILL_KPI') AND (v_table_name!='D_CHN_W_CEILL_KPI')  then   ----排除 表D_CHN_G_CEILL_KPI
	          v_sql:= 'ALTER TABLE '||v_table_owner||'.'||v_table_name||' ADD PARTITION P'||v_max_next_mon||' VALUES LESS THAN ('''||v_max_next2_mon||''') TABLESPACE '||v_tablespace_name||' ';
            EXECUTE IMMEDIATE v_sql;
            PRC_LOG_WRT(v_date,v_prc,v_stepnum,v_sql,v_errmsg,SQL%ROWCOUNT);
            COMMIT;
            
         ELSIF (v_table_name='D_CHN_G_CEILL_KPI') OR (v_table_name='D_CHN_W_CEILL_KPI') then
		        v_sql:= 'ALTER TABLE '||v_table_owner||'.'||v_table_name||' ADD PARTITION P'||v_max_next_mon||' VALUES LESS THAN 
            (TO_DATE('''||v_max_next2_mon||''',''YYYYMMDD'',''NLS_CALENDAR=GREGORIAN'')) TABLESPACE '||v_tablespace_name;
            EXECUTE IMMEDIATE v_sql;
            PRC_LOG_WRT(v_date,v_prc,v_stepnum,v_sql,v_errmsg,SQL%ROWCOUNT);
            COMMIT;
            
         end if;
       END LOOP;
       CLOSE v_open_cur;

   END LOOP;


     -- 存储过程错误信息记录
  EXCEPTION
  WHEN OTHERS THEN

    v_errmsg := v_stepnum || '步出错:' || SQLERRM;
    ---插入日志
    PRC_LOG_WRT(v_date,v_prc,v_stepnum,v_sql,v_errmsg,-1);
    COMMIT;

END;


分享到:
评论

相关推荐

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

    总的来说,这个压缩包提供了一套完整的解决方案,用于自动管理MySQL的分区表。通过存储过程和事件调度器,可以实现分区的动态创建和删除,从而减轻数据库管理员的维护负担,同时保持数据库性能的高效。正确理解和...

    ORACLE表自动按月分区步骤

    通过上述步骤,我们可以看到分区表会自动为新数据所在月份创建一个新的分区`SYS_P183`,并且会自动生成相应的分区索引。 #### 八、总结 本文详细介绍了如何在Oracle数据库中实现表的自动按月分区及本地索引的创建...

    Oracle 分区表自动维护脚本

    标题中提到的“Oracle 分区表自动维护脚本”是指一种在Oracle数据库系统中用于管理和维护分区表的自动化脚本。这种脚本可以执行多个维护任务,包括但不限于:增加新分区、删除历史分区、拆分分区和数据清除等操作。...

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

    分区表和分区索引是数据库管理系统中的重要概念,它们对于数据存储、检索效率以及系统性能优化具有关键作用。本文将全面解析分区表和分区索引的原理、创建方法以及管理策略。 首先,让我们来理解什么是分区表。在...

    Oracle分区表及分区索引

    Oracle 分区表及分区索引 Oracle 分区表是指将一个大表分割成多个小表,每个小表称为一个分区,分区表的优点是可以提高查询性能、改善管理型、增强容错性等。 分区表的分类: 1. 范围分区(Range Partitioning) ...

    u启动PTDD分区表医生工具如何修复硬盘重建分区表【图文教程】.docx

    u启动PTDD分区表医生工具如何修复硬盘重建分区表【图文教程】 在本篇文章中,我们将详细介绍如何使用u启动PTDD分区表医生工具来修复硬盘重建分区表的问题。 知识点一:硬盘分区表损坏的原因和解决方法 硬盘分区表...

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

    基础表.txt文件可能包含了创建分区表的SQL语句示例,例如: ```sql CREATE TABLE your_table ( id INT AUTO_INCREMENT PRIMARY KEY, date_column DATE NOT NULL, -- 其他列 ) PARTITION BY RANGE (TO_DAYS(date_...

    mysql 实现定时给表追加分区

    实现mysql 每天定时自动给数据库表追加分区,包含存储计划和存储过程

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

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

    关于oracle的表空间,分区表,以及索引的总结

    ### Oracle的表空间、分区表及索引的深入解析 #### 表空间(Tablespace)在Oracle中的作用与管理 表空间是Oracle数据库中的逻辑存储单元,它将数据组织成可管理的部分,允许数据库管理员更好地控制数据存储和性能...

    ORACLE-分区表的用法

    - **分区表**:随着数据量的增长,单个表中的数据量可能会变得非常庞大,这不仅会影响查询性能,还可能导致维护工作变得复杂。为了应对这一问题,Oracle提供了表分区功能。分区表是在逻辑上仍然被视为一个整体的表,...

    oracle_分区表数据定期迁移到其他数据库测试方案

    - 示例中的分区表`EXP_TEST`按照`CREATE_TIME`字段进行范围分区,例如`PEXPTEST_DATA_20050801`分区存放的数据是在2005年8月1日之前的数据。 3. **数据迁移策略**: - **定期迁移**:根据需求,定期将某个时间段...

    PostgreSQL分区表(partitioning)应用实例详解

    在本实例中,我们学习了如何创建一个基于时间的分区表,包括创建父表、子表以及定义触发器来自动路由插入操作。同时,通过创建索引和维护策略,可以进一步优化查询性能和系统资源利用。在实际应用中,根据具体业务...

    unix AIX 环境下 exp 备份 Oracle 分区表实例

    在Unix AIX环境下进行Oracle分区表的备份操作是IT领域中一项重要的技能,尤其是在处理大量数据和维护系统稳定性时。本文将深入解析如何在Unix AIX环境下使用exp工具备份Oracle分区表,包括环境配置、备份策略及恢复...

    创建mysql表分区的方法

    - 分区表的维护成本可能会增加,特别是需要定期调整分区策略以适应数据增长。 综上所述,MySQL表分区是大数据场景下的有力工具,通过合理设计和使用,可以显著提升数据库的性能和管理效率。在实际应用中,应结合...

    SQLServer2005分区表

    ### SQL Server 2005 分区表技术详解 ...通过合理规划分区策略,企业可以更好地应对日益增长的数据量,同时确保系统的稳定运行和高效响应。对于需要处理大量数据的应用场景而言,分区表无疑是一种不可或缺的技术手段。

    全面学习分区表及分区索引-Oracle.pdf

    ### 分区表及分区索引概述 在Oracle数据库中,分区技术是一种重要的数据管理手段,尤其适用于处理大型数据集。通过将大型表或索引分解为较小、更易于管理的部分,分区可以显著提高查询性能并简化数据管理。本文将...

    SqlServer分区表学习总结.pdf

    3. **创建分区表**:使用上述分区方案创建表,使表的数据按照预设规则自动分区。 创建分区函数的SQL语句格式如下: ```sql CREATE PARTITION FUNCTION partition_function_name (input_parameter_type) AS RANGE ...

    mysql 数据库表分区

    - 在分区表的上下文中,触发器可能用于在数据插入或更新时自动调整分区,确保数据分布合理。 7. **维护与备份**: - 分区使得大型表的备份和恢复更加高效,因为可以分别处理每个分区,而非整个表。 - 数据迁移和...

    许中清-PostgreSQL表分区实践

    分区表可能会随着时间的推移而增加新的分区或删除过时的分区。在这种情况下,数据库管理员需要更新分区表结构,并维护数据库的统计信息,这通常涉及到分析分区表上每个分区的数据分布,以保证查询优化器能够生成高效...

Global site tag (gtag.js) - Google Analytics