创建分区表(按照年份分区,自动新增分区)

创建分区表AAA,通过字段创建时间的年份来分区,分区表自动根据插入的数据新增对应的分区,不过此处自动创建的分区名称为系统创建的,如:SYS_24。

CREATE TABLE AAA
(
ID NUMBER(8),
CREATETIME DATE,
VALUE NUMBER(8)
)
PARTITION BY RANGE(CREATETIME)
INTERVAL(NUMTOYMINTERVAL(1,‘YEAR‘))
(
PARTITION P2014 VALUES LESS THAN(TO_DATE(‘2015-01-01‘,‘YYYY-MM-DD‘))
);

不过,这种分区名称难以使用,故后面会使用存储过程来修改分区表的分区名。

create or replace procedure pro_modified_partition_name
as
cursor partitiionList is SELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,high_value FROM USER_TAB_PARTITIONS WHERE TABLE_NAME =‘AAA‘ and instr(PARTITION_NAME, ‘SYS‘) > 0;
row_p partitiionList%rowtype;
pName VARCHAR2(100);
hv VARCHAR2(2000);
hv_year number;
pNewName varchar2(100);
SQL_STMT VARCHAR2(200);
begin
 open partitiionList;
 for row_p in partitiionList loop
      pName:= row_p.PARTITION_NAME;
      hv:= row_p.high_value;
      hv_year := to_number(substr(hv,11,4))-1;
      pNewName := ‘P‘|| hv_year;
      --执行alter语句要使用动态sql(execute immediate)
      SQL_STMT := ‘alter table AAA rename partition ‘||pName||‘ to ‘||pNewName;
      execute immediate SQL_STMT;
  end loop row_p;
  close partitiionList;
end;

通过分区表的high_value值来截取对应的时间,再用以修改为分区名。

时间: 2024-10-10 18:01:47

创建分区表(按照年份分区,自动新增分区)的相关文章

Mysql分区技术 --创建分区表

分区的作用:数据库性能的提升和简化数据管理 在扫描操作中,mysql优化器只扫描保护数据的那个分区以减少扫描范围获得性能的提高.分区技术使得数据管理变得简单,删除某个分区不会对另外的分区造成影响,分区有系统直接管理不用手工干预. 查询当前的mysql数据库版本是否支持分区show variables like '%partition%'; 分区类型[RANGE 分区]:基于属于一个给定连续区间的列值,把多行分配给分区. [LIST 分区]:类似于按RANGE分区,区别在于LIST分区是基于列值匹

创建分区表2:对已经存在的表进行分区

Sql Server 支持对一个已经存在的表进行分区. -- create parition function CREATE PARTITION FUNCTION pf_int_Left (int) AS RANGE LEFT FOR VALUES (10,20); --determine partition number select $Partition.pf_int_left(21) CREATE PARTITION SCHEME PS_int_Left AS PARTITION pf_i

oracle 11g 新增分区

oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: Creating Partitions 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值的增长可用分区会逐渐减少直到没有可使用的分区为止.而间隔分区就是为了解决插入表中的数据超过了所有范围分区时而不能自动创建分区的问题.必须至少创建一个范围分区,范围分区的键值确定范围分区的上限值,超过该上限值数据库服务器自动创建特定间隔的分区.主要用在可预知的添

时间范围分区自动新建

前段时间做了个分区功能,表结构如下: -- Create table create table SUM_DUTY ( oid VARCHAR2(36) default sys_guid() not null, entry_id VARCHAR2(18) not null, manual_no VARCHAR2(12), p_date DATE, i_e_flag VARCHAR2(1), traf_mode VARCHAR2(1), trade_code VARCHAR2(10), trade_

centos新增分区常用命令

查看分区挂载信息: # df -lh 硬盘使用明细: # fdisk -l 硬盘管理: # fdisk /硬盘路径 新增分区刷新处理: # partprobe /硬盘路径 格式化分区: # mkfs.xfs /硬盘路径 分区挂载: # mount /分区路径 /目标路径 设置开机自动挂载: # vim /etc/fstab

Mysql 存储过程+定时任务,完成分区自动维护

建表: drop table if exists terminal_parameter; CREATE TABLE `terminal_parameter` ( `terminal_parameter_id` int(11) NOT NULL AUTO_INCREMENT, .................... `createtime` datetime NOT NULL, `userid` int(8) NOT NULL, `terminal_id` int(8) DEFAULT NULL

Ubuntu开机自动挂载分区

首先,查看系统的磁盘代号: fdisk -l Disk /dev/sda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors Units = 扇区 of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal

创建分区、格式化分区、挂载分区

大致思路: 1.查看分区状态 2.创建分区 3.重新加载分区表 4.格式化分区 5.挂载分区到目录 查看当前分区状态: [[email protected] ~]# fdisk -cul   Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Secto

MySQL每天自动增加分区

有一个表tb_3a_huandan_detail,每天有300W左右的数据.查询太慢了,网上了解了一下,可以做表分区.由于数据较大,所以决定做定时任务每天执行存过自动进行分区. 1.在进行自动增加分区前一定得先对表手动分几个区 1 ALTER TABLE tb_3a_huandan_detail PARTITION BY RANGE (TO_DAYS(ServiceStartTime)) 2 ( 3 PARTITION p20160523 VALUES LESS THAN (TO_DAYS('2