oracle11g自动分区

oracle11g自动分区,第1张

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

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

http://blog.itpub.net/30126024/viewspace-2144878/

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函数,将数字转成年月,时分秒

详见:https://blog.csdn.net/jolly10/article/details/82621449

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

5、插入数据再次查看分区,详见:http://blog.itpub.net/10271187/viewspace-1765908/

6、修改分区、合并分区、拆分分区,详见 :https://www.cnblogs.com/gemine/p/9011898.html

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

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

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

http://blog.itpub.net/30126024/viewspace-2144878/

8、oracle 10g创建表分区 https://blog.csdn.net/canway01/article/details/103871929

9、删除

1.不保留,直接删除:https://zhidao.baidu.com/question/1865544374775063187.html

alter table table_name drop/truncate partition partition_name

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

Oracle数据库中,当用户手动新增分区数据时,该数据会自动进入分区中。当用户使用 “Alter Table” 语句新建分区时,Oracle 会根据分区键的值将新增数据自动放入分区中。但是,如果用户在新建分区之前就已经有了一些数据,那么这些数据不会自动进入分区中,而是需要用户手动将这些数据放入分区中。

程序中不能直接执行alter命令,要这样改:

DECLARE

T date

cmd varchar2(500)-- 用cmd变量存储拼接好的命令

BEGIN

SELECT trunc(add_months(sysdate,1),'mm') INTO T FROM DUAL

cmd:='alter table TEST ADD partition TIME_'||TO_CHAR(T,'yyyymm')||' values LESS THAN(trunc(add_months(sysdate,2),''mm''))'

dbms_output.put_line(cmd)-- 可以检查一下拼接后的命令有没有问题

execute immediate cmd

……

后面的alter等命令,用同样的方式,先赋值给cmd,再用execute immediate cmd执行


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/7993076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存