在项目中经常要增加大量的分区,总结了增加分区的方法:

1.如果只增加一级分区,没有子分区,可以简单的用如下语句增加:

alter table TDW_12580_ORD_REL_TAB_M

add PARTITION M_TDW_12580_201005 VALUES (201005)

[@more@]

2.如果增加的分区有子分区,则需要先建一个一级分区和子分区,然后用下面的脚本来增加:

注意:表名用大写,日期格式为20100801 结束日期为下一个月的1号,如20100901

脚本:

declare

--初始化参数

v_table_name varchar2(30);

v_partition_name varchar2(30);

v_subpartition_name varchar2(30);

v_segment_type varchar2(30);

v_begin_date_str varchar2(10);

v_sql varchar2(1000);

v_begin_date date;

v_end_date date;

--查找出所有分区表

cursor C_table_name is

select t1.table_name

from user_tables t1

where t1.table_name in ('&TABLE_NAME');

begin

open C_table_name;

loop

fetch C_table_name

into v_table_name;

exit when C_table_name%notfound;

--查找出分区表的类型

select distinct (t2.segment_type)

into v_segment_type

from user_segments t2

where t2.segment_name = v_table_name;

if v_segment_type in ('TABLE SUBPARTITION') then

--取出分区和子分区表名的不含日期部分

select distinct substr(t3.partition_name,

0,

length(t3.partition_name) - 6),

substr(t3.subpartition_name,

0,

length(t3.subpartition_name) - 8)

into v_partition_name, v_subpartition_name

from user_tab_subpartitions t3

where t3.table_name = v_table_name;

--初始化日期

v_begin_date := to_date('&START_DATE', 'YYYYMMDD');

v_end_date := to_date('&END_DATE', 'YYYYMMDD');

--循环创建2010年的表分区

while v_begin_date < v_end_date loop

--创建增加分区语句,如:alter table v_table_name add partition v_partition_nameYYYYMM values (YYYYMM) (subpartition v_subpartition_nameYYYYMMDD values (YYYYMMDD));

v_begin_date_str := substr(to_char(v_begin_date, 'YYYYMMDD'), 7, 2);

if v_begin_date_str in ('01') then

v_sql := 'alter table ' || v_table_name || ' add partition ' ||

v_partition_name ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

' values (' ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

') (subpartition ' || v_subpartition_name ||

to_char(v_begin_date, 'YYYYMMDD') || ' values (' ||

to_char(v_begin_date, 'YYYYMMDD') || '))';

else

v_sql := 'alter table ' || v_table_name || ' modify partition ' ||

v_partition_name ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

' add subpartition ' || v_subpartition_name ||

to_char(v_begin_date, 'YYYYMMDD') || ' values (' ||

to_char(v_begin_date, 'YYYYMMDD') || ')';

end if;

--显示增加分区语句

--DBMS_OUTPUT.put_line(v_sql);

--执行增加分区语句

execute immediate v_sql;

--日期加一天

v_begin_date := v_begin_date + 1;

end loop;

elsif v_segment_type in ('TABLE PARTITION') then

--取出分区表名的不含日期部分

select distinct (substr(t4.partition_name,

0,

length(t4.partition_name) - 6))

into v_partition_name

from user_tab_partitions t4

where t4.table_name = v_table_name;

--初始化日期

v_begin_date := to_date('&START_DATE', 'YYYYMMDD');

v_end_date := to_date('&START_DATE', 'YYYYMMDD');

--循环创建2010年的表分区

while v_begin_date < v_end_date loop

--创建增加分区语句,如:alter table v_table_name add partition v_partition_nameYYYYMM values (YYYYMM);

v_sql := 'alter table ' || v_table_name || ' add partition ' ||

v_partition_name ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) ||

' values (' ||

substr(to_char(v_begin_date, 'YYYYMMDD'), 0, 6) || ')';

--显示增加分区语句

--- DBMS_OUTPUT.put_line(v_sql);

--执行增加分区语句

execute immediate v_sql;

--日期加一月

v_begin_date := add_months(v_begin_date, 1);

end loop;

else

DBMS_OUTPUT.put_line(v_table_name || '表类型为' || v_segment_type ||

',请查看!');

end if;

end loop;

close C_table_name;

end;

oracle添加分区语句_oracle增加分区的方法相关推荐

  1. oracle添加分区语句_oracle表分区增加分区

    昨天发现车辆轨迹库的表分区用完了,连夜加了分区,我们存轨迹的这张表建分区的时候按日期建只到2012-10-15,分区名从TAB_GPSBUSHIS_P1....TAB_GPSBUSHIS_P999,从 ...

  2. oracle 生成 sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

  3. oracle+生成+sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

  4. oracle添加分区语句_Oracle表创建分区如何实现?

    1.一般分区表都会很大,所以可以先创建表空间,为了让分区表存放到单独的表空间,否则默认会存放到USERS表空间 2.创建TABLESPACE TS1: CREATE TABLESPACE TS1 DA ...

  5. oracle添加分区语句_Oracle分区详解和创建

    Oracle分区详解和创建 Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大.对表中数据的查询.表的备份的时间将大大 ...

  6. oracle表分区设计_Oracle数据库分区技术

    1.Oracle的分区技术基本原理: Oracle的分区技术的基本思路就是:分而治之. 2.分区概述 l 大数据对象(表.索引)被分成小的物理段 l 当分区表建立时,记录基于分区字段值被存储到相应分区 ...

  7. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  8. java oracle分页查询语句_Oracle分页查询语句的写法(转)

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  9. Linux下察看swap分区大小及增加分区大小

    Linux下察看swap分区大小的命令 top 或者fdisk -l 或者free -m SWAP分区一般大小为物理内存的2倍,但最大不超过2G: 增加SWAP空间的方法有两个:增加另外一个SWAP分 ...

最新文章

  1. Trailblazer —— Rails 的扩展概念驱动开发框架
  2. linux下批量发请求
  3. mysql数据库死锁 情景一
  4. 9 10次C语言上机作业,C语言第五次上机作业参考答案
  5. 手机号验证_国际手机号收不到微博验证短信,微博验证短信一直提示超过上限怎么办?...
  6. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
  7. 企业网站 源码 服务邮箱:_口碑营销:乌海腾讯企业邮箱服务报价
  8. SAP WebClient UI drop down list(下拉列表)的一个故障和解决方法
  9. WriteComponent,ReadComponent
  10. arduino 3d打印机_Firefox OS流视频,使用Arduino销售3D打印机等
  11. Mysql/Mariadb本地不可以登录,远程可以登录问题的解决
  12. IP转发的最长前缀匹配
  13. android 获得资源图片,快速获取app(ios和安卓)资源图片
  14. 心理学的应用领域有哪些?
  15. 湖南大学计算机专业女生宿舍,2020年湖南大学新生宿舍环境条件,大一新生男生女生宿舍内部图片【多图】...
  16. 一切前端概念,都是纸老虎(附送书的抽奖结果)
  17. 【网络工程师】<软考中级>各类以太网标准10BASE-T/100BASE-T4/100BASE-FX/1000BASE-X等详解(了解)
  18. MySQL数据库表结构的设计
  19. 国内十大正规现货交易平台排名(2021版榜单)
  20. YOLOv5训练自己的数据集详解

热门文章

  1. 拍照手机哪款好?华为Mate 20 Pro值不值得买
  2. evo测试工具错误: evo module evo.main_traj crashed - no logfile written (disabled)
  3. 如何选型PLM软件?PLM选型时注意哪些事项呢?
  4. php 统计 app 下载量,如何做一个算法估算出一个不定时抓取到一个APP每天的下载量...
  5. 【值得收藏】一份非常完整的Mysql规范
  6. python悬浮球窗口_实现悬浮窗口
  7. 机器学习工程师 — Udacity 基于CNN和迁移学习创建狗品种分类器
  8. 智慧城市发展概况及其范畴
  9. excel中如何将数字转换成文本
  10. 逼近理想解法TOPSIS(python程序)