CREATE OR REPLACE PROCEDURE PRC_ADD_PARTITION_MON
IS
--/************************************************************************************
-- 程序名称: PRC_ADD_PARTITION_MON
-- 功能描述: 增加表月分区存储过程 -- 期达目的: 将此程序挂起 每月1自动在最大表分区上面加1个月 无需人为来操作
-- 注意: 表分区里面切忌不要出现2个表空间 不然这个会有问题
-- 输入参数: 'YYYYMM' - <作业的处理日期>
-- 输出参数: 0 - <0为正常结束,其余为异常>
-- 输入资源:
-- 输出资源:
-- 中间资源: <用户名>.<中间表或视图等对象名>
-- 创建人员: XXXX
-- 创建日期: 20120725
-- 版本说明: 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);-- 要拓展的表分区的月份的下一个月
BEGIN
v_prc:='PRC_ADD_PARTITION_MON';
SELECT to_char(SYSDATE,'yyyymmdd') INTO v_date FROM dual;
--正文SQL处理
--参考思路
--先把表,表用户,表分区最大值,表分区所在表空间拿出来
--循环迭代 取出这些表的月份的下一个月份值
--取到下一个月的值 添加表分区
-- 1 拿出需要拓展月分区的表的相关信息
OPEN v_open_cur FOR
'SELECT TABLE_NAME,TABLE_OWNER,MAX(SUBSTR(PARTITION_NAME,2,6)),TABLESPACE_NAME FROM ALL_TAB_PARTITIONS
WHERE TABLE_OWNER=''JXZZJY''
--AND TABLE_NAME LIKE ''MD%''
AND LENGTH(RTRIM(PARTITION_NAME))=7
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;
-- 把循环里面的最大月份加1 作为下一个月 为开始拓展表分区做好准备
SELECT TO_CHAR(ADD_MONTHS(TO_DATE(v_max_part_mon,'YYYYMM'),1),'YYYYMM') INTO v_max_next_mon FROM DUAL;
SELECT TO_CHAR(ADD_MONTHS(TO_DATE(v_max_part_mon,'YYYYMM'),2),'YYYYMM') INTO v_max_next2_mon FROM DUAL;
-- 开始拓展表空间
v_stepnum :=v_stepnum+1;
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;
END LOOP;
CLOSE v_open_cur;
-- 存储过程错误信息记录
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;
分享到:
相关推荐
根据提供的文件信息,本文将详细解释Oracle分区技术及其在解决UNDOTBS01.DBF文件过大问题中的应用方法,并进一步探讨Oracle分区的不同类型及其应用场景。 ### Oracle 分区概述 Oracle分区是一种将大表或索引分割成...
- **分区表**:随着数据量的增长,单个表中的数据量可能会变得非常庞大,这不仅会影响查询性能,还可能导致维护工作变得复杂。为了应对这一问题,Oracle提供了表分区功能。分区表是在逻辑上仍然被视为一个整体的表,...
例如,时间序列数据可能需要按时间自动添加新分区,而动态分区扩展则允许在需要时动态创建新的分区。 通过分区实现信息生命周期管理,Oracle数据库允许在保持数据在线的同时,将其移动到不同的存储层,如使用表压缩...
- **时间间隔分区**:如范围分区的变种,自动创建新分区以适应时间序列数据的增长。 - **全局索引分区**:与分区表相关联的索引也按照相同的方式分区。 2. **分区的好处**: - **性能提升**:查询只扫描相关的...
版本12.2开始支持多列列表分区、自动列表分区、间隔子分区、外部表分区、多种在线分区操作等功能。版本18开始支持并行分区连接性能增强、在线修改分区策略、在线合并分区等功能。 在适用场景中,时间属性、关注近期...
6. **11g 中自动增加新分区**:从 Oracle 11g 开始,支持自动创建新的分区,以适应不断增长的数据需求。 - 示例:创建自动增加分区的表。 ```sql CREATE TABLE sales ( year NUMBER, month NUMBER, sales_...
在Unix AIX环境下进行Oracle分区表的备份操作是IT领域中一项重要的技能,尤其是在处理大量数据和维护系统稳定性时。本文将深入解析如何在Unix AIX环境下使用exp工具备份Oracle分区表,包括环境配置、备份策略及恢复...
总结起来,"Oracle partition_oracle_自动创建分区表脚本"是一个利用Oracle数据库的分区功能,通过PL/SQL包"PKG_ADD_PART_NEW4"提供的存储过程,实现自动化创建分区表的解决方案。这个工具可以帮助数据库管理员更...
1. **范围分区**:基于`sale_date`字段进行范围分区,例如每个月的数据放在一个分区中。 2. **全局索引**:在`product_id`字段上创建全局索引,以便快速定位产品相关的销售记录。 3. **局部索引**:对于每个分区,在...
Oracle 和 MySQL 在处理自动增长列(通常用于主键ID)方面有着显著的差异。自动增长列主要用于确保每个新插入的行都有一个唯一的标识符。在MySQL中,这个过程相对直接,而在Oracle中则需要借助序列(sequence)来实现...
对于应用程序来说,分区是透明的,这意味着应用无需知道数据已被分区,其访问分区表的方式与普通表相同,Oracle查询优化器会自动处理分区。 在设计分区策略时,需要考虑的关键因素包括数据分布、I/O需求以及空间...
本文档中的迁移方案旨在实现将Oracle分区表中的数据定期迁移到另一个数据库。这样的需求可能出于多种考虑,比如数据归档、负载均衡或数据同步等。 ### 三、Oracle 分区表迁移方案概述 该方案主要包括以下几个步骤...
- **分区修剪**:Oracle查询优化器会自动识别只涉及部分分区的查询,从而减少不必要的扫描。 - **分区交换**:可以使用ALTER TABLE语句实现分区的替换,用于更新或重构数据。 - **分区合并与拆分**:根据需要,...
Oracle数据库中的表分区是一项高级特性,它允许将大型表分解为较小、更易管理的部分,称为分区。...序列则为数据库对象提供了自动增长的唯一标识。理解并熟练应用这些概念对于优化Oracle数据库的管理和使用至关重要。
综上所述,Oracle分区技术随着时间的发展不断完善和进步,已经成为处理大规模数据集的关键技术之一。通过对表进行适当的分区,不仅可以显著提升查询性能,还能大幅简化数据管理任务,确保数据库系统的高可用性和高效...
1. **区间分区**(Interval Partitioning):自动创建分区,特别适合于处理无法预测的数据增长情况。 2. **分区顾问**(Partition Advisor):提供了一个工具帮助分析现有表是否适合进行分区以及如何进行分区。 3. *...
3. **分区策略调整**:随着数据量的增长,可能需要重新评估和调整分区策略。 五、Oracle 10g中的分区增强功能 Oracle 10g引入了一些新的分区特性,如: - **Automatic Partitioning**:自动根据预定义的规则创建新...
Oracle海量数据自动化归档平台的研究与实现 一、研究背景与目的 电信行业中每月会产生大量的数据,这些数据若不进行有效的管理,会给存储空间、系统性能和数据维护带来严重挑战。随着数据量的快速增长,如何合理...
Oracle数据库集群和分区技术是Oracle数据库系统为了提供高可用性、可伸缩性和性能优化而设计的高级特性。本篇内容主要围绕Oracle Real Application Clusters (RAC) 和数据库分区技术进行讲解。 首先,我们来看...