oracle如何按日分区,oracle按照日期建分区 删除分区

oracle11g自动分区

在Oracle10g中,没有定义间隔分区,只能通过范围分区实现间隔分区功能,如果要实现自动创建分区,只能通过创建JOB或者scheduler来实现;而在11g中,Oracle直接提供了间隔分区功能,大大简化了间隔分区的实现。

我们提供的服务有:成都网站设计、网站制作、微信公众号开发、网站优化、网站认证、武川ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的武川网站制作公司

----注:oracle11g虽然可以自动分区,但是分区的名字不能自定义,对于需要定时删除分区时没法处理,不如通过时间范围来手工分区。详见

create table HIP_LOG_NODE_Part

(

ID                   VARCHAR2(32)         not null,

RECORD_TIME          DATE

)tablespace TB_HIP_LOG_NODE

PARTITION BY RANGE (RECORD_TIME) interval (numtoyminterval(1, 'month'))

STORE IN (TB_HIP_LOG_NODE)

(

partition hip_log_node_partition values less than (to_date('2019-08-01 00:00','yyyy-MM-dd HH24:mi')) tablespace TB_HIP_LOG_NODE

);

1、Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区。

2、2019-08-01前的数据(包含8月份的数据)会放入hip_log_node_partition 分区,8月1日后的数据每月只要有数据,就会自动创建一个分区。也就是从9月开始,开始新建分区。

3、interval函数--将数值按标准换算为日期

numtodsinterval、numtodsinterval函数,将数字转成年月,时分秒

详见:

4、查看表分区 select table_name,partition_name from user_tab_partitions where table_name='INTERVAL_SALES';

5、插入数据再次查看分区,详见:

6、修改分区、合并分区、拆分分区,详见 :

7、创建索引(分区索引、全局索引) :

非分区字段创建主键,则创建主键local索引时必须加上分区字段

ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (主键字段,分区字段) USING INDEX LOCAL;

8、oracle 10g创建表分区

9、删除

1.不保留,直接删除:

alter table table_name drop/truncate partition partition_name;

具体用drop还是truncate,得你自己衡量,drop的话原来的分区和数据直接就没有了,truncate的话,只是数据没有了,分区还在。

oracle表无日期字段怎么自动分区

没有日期字段就用其他的分区方式。

我们用日期分区主要是把每月的数据放在一个分区,那么如果没有分区字段,那么我们就需要用其他的字段分区了,比如hash分区(这个是自动分区,直接将table分成若干个区域,数据会根据字段hash值自动分配到某个区域),列表分区(根据表中的某个字段去进行分区,比如某城有四个区域,那么正好用这四个值去分区就可以了)。

如果有其他的数字字段,那么看看这些数字字段能不能用,如果能用也可以用范围分区,不一定非要是日期字段的。

oracle建表按日分区,如何truncate当前日期15天前的记录分区

--建表

create table t_temp_01 (

t_date varchar2(10),

t_num number(10)

)

partition by list (t_date)

(partition p_20150726 values ('20150726'),

partition p_20150809 values ('20150809'),

partition p_20150810 values ('20150810')

);

--查询15天前日期

select sysdate - 15 from dual;

--插入数据

insert into t_temp_01 values ('20150726',1) ;

insert into t_temp_01 values ('20150809',2) ;

insert into t_temp_01 values ('20150810',3) ;

commit;

--查询数据

select * from t_temp_01 ;

--truncate表的15天前分区

declare

v_sql varchar(500) := '';

begin

v_sql := 'alter table t_temp_01 truncate partition p_' || to_char(sysdate - 15 ,'yyyymmdd') ;

dbms_output.put_line(v_sql);

execute immediate v_sql ;

end ;

select * from t_temp_01 ;


网站名称:oracle如何按日分区,oracle按照日期建分区 删除分区
文章URL:http://pwwzsj.com/article/hsjsdg.html