`
sinianxue
  • 浏览: 17068 次
  • 性别: 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表自动按月分区步骤

    分享一个自己学习和实践的关于Oracle表自动按月分区知识点,已经在项目上线并且有效的方案。

    Oracle 分区表自动维护脚本

    使用该脚本, 可以由数据库系统定时自动维护分区表, 增加新分区, 删除历史分区, 拆分分区, 数据清除等. local index is suggested

    mysql 实现定时给表追加分区

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

    详解oracle 10g的分区

    包括表分区方法、索引分区方法。 范围分区(range partitioning); 哈希分区(hash partitioning); 列表分区(list partitioning); 范围-哈希组合分区(composite range-hash partitioning); 范围-列表组合...

    SQL普通表转分区表的方法

    代码如下:CREATE TABLE Sale( [Id] [int] identity(1,1) NOT NULL, –自动增长 [Name] [varchar](16) NOT NULL, [SaleTime] [datetime] NOT NULL, constraint [PK_Sale] primary key clustered –创建主键 ( ...

    易数据数据恢复3.3

     7、 支持传统的MBR分区表及GUID分区表(GPT磁盘)。  8、 支持100余种常见文件类型的深度恢复。  V3.1版更新内容:  1、增加几十种文件格式的类型恢复。  2、增强文件预览功能,可用大窗口预览,支持...

    超级数据恢复软件

    (3)超级分区表扫描恢复算法,对任何一个无分区或者分区表损坏或者重新分区过的硬盘,能在几分钟内对全盘进行闪电扫描分区信息,列出全部分区进行恢复。扫描到的分区能够和当前正常的分区区分开并以蓝色粗体高亮...

    ONE KEY GHOST 一键备份还原

    4、解决了在个别机子上不能获取分区表信息的问题 5、修正了不能显示香港繁体中文的问题 6、修改用户自定义的普通或畸形目录为不隐藏 7、修正了同一畸形目录在不同环境下可能出错的问题 OneKey Ghost V6.5 五周年...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...

    ONGKEYGHOST一键还原

    4、解决了在个别机子上不能获取分区表信息的问题 5、修正了不能显示香港繁体中文的问题 6、修改用户自定义的普通或畸形目录为不隐藏 7、修正了同一畸形目录在不同环境下可能出错的问题 OneKey Ghost(一键GHOST) V...

    Mac OS X Snow Leopard 10A432雪豹 BT种子

    Windows默认使用MBR分区表,所以我们硬盘上的分区多数是以MBR分区表构建。而苹果只允许安装在GPT(GUID)分区表下,一个硬盘只能在MBR和GPT二者选择其一,将MBR改成GPT会把磁盘上所有分区所有数据删除。修改Mac OS X...

    2010最新php免杀木马乱码优化版下载

    在 WIN主机下自动探测所有分区以 及分区类型。 3、增加通过MYSQL方式上传下载文件,其中下载 文件不需要数据库用户具有FILE权限。即可完 整下载。程序1、自动判断两种方式下载。上 传需要具有FILE权限。 4、加强...

    SQL Server数据库查询速度慢原因及优化方法

    a、在实现分区视图之前,必须先水平分区表 b、 在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上 运行。...

    14操作系统实验报告.doc

    操作系统实验报告 院系:信息科学与工程学院 专业:计算机科学与技术 ... 7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目) 8、结合以上实验,PCB增加为:

    操作系统实验报告java.doc

    操作系统实验报告 院系: 专业: 班级... 7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目) 8、结合以上实验,PCB增加为: {PID,要求运行时间,优先权,

    OS实验报告.docx

    (8)自行假设主存空间大小,预设操作系统所占大小并构造未分分区表。表目内容:起址、长度、状态(未分/空表目)。 (9)进程完成后,回收主存,并与相邻空闲分区合并。 (10)最好采用图形界面;

    Toad 使用快速入门

    可以修改表的各种逻辑和物理属性,修改列的属性,增加列,删除列(在Oracle8i里面),修改表的物理存储属性,Truncate,Drop等。 iii. 可以生成建表的完整的DDl语句,包括存储信息,权限信息,约束,索引和触发器等,...

    校园广播系统设计方案.doc

    自动播出无人值守把管理教师从日益增加的设备管 理工作中解放了出来,例如有些学校有学生住校,如果从每天早晨响起床号,背景音乐 ,眼保健操,广播操,十几次上下课铃声,到晚上的熄灯号都要由专人来播出,那么管理 ...

Global site tag (gtag.js) - Google Analytics