oracle如何拆分分区 oracle数据拆分

Oracle列表分区怎样进行拆分分区【oracle如何拆分分区 oracle数据拆分】可以这么考虑!这个问题很奇怪 。列表分区还要接着拆?还是不懂语法?
列表分区是根据某列的具体值进行分区 , 如果还要拆,建议用范围-列表分区
oracle数据库按照一定条件把表拆分为多个表?其实不需要拆分表 , 分区就可以,还是原来的表名,只是将原来的表分成oracle如何拆分分区了若干的分区,这样能起到分表的效果,还不用分成很多的表 。
比如oracle如何拆分分区你原来的表的名字是A , 那么将该表改为A1,然后从新建立一个分区表A,分区的依据是班级,也就是list分区,也就是一般意义上的列表分区表 。
然后再将A1的数据插入新A表就可以了 。
至于分区表的建立方式,往上很多,可以自行查找 。
这样操作查询的语句不需要变,只是在不跨分区查询的情况下,相当于分成了若干张表去查询 。比如查询1班的成绩,那么就是在1班的分区内,不会有2班的问题,就相当于你用一个指头就能解决问题,不会动用这个手一样 。
如果分表的话,那么假设有12个班,那么就要建立12张表,这样的话,语句就要写12次,冗余太大了 。
分区表不指定拆分方式的时候默认按照什么方式拆分管理分区表:拆分、添加与交换分区
skyin_1603
2016-12-05 17:00:41
Oracle
原创
这里说的拆分分区 , 只对maxvalue分区的分区表来说的 , 实质也是添加分区 。
以下是测试过程:
----拆分分区 添加分区与交换分区:
---拆分分区:(拆分分区的前提条件是有一个maxvalue分区)
suxing@PRODSET LINES 120
suxing@PRODCOL TABLE_NAME FOR A15
suxing@PRODCOL PARTITION_NAME FOR A15
suxing@PRODCOL TABLESPACE_NAME FOR A30
suxing@PRODSELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME
2FROM USER_TAB_PARTITIONS;
TABLE_NAMEPARTITION_NAMETABLESPACE_NAME
--------------- --------------- ------------------------------
P_TESTP_10MYSPACE
P_TESTP_20USERS
P_TESTP_30MYSPACE
P_TESTP_40USERS
---查看表中分区p_40的数据记录:
suxing@PRODselect * from p_test partition (p_40);
ID NAMECREATED
---------- ---------- -------------------
44 susu2016-12-05 09:53:59
55 susu2016-12-05 09:54:06
---尝试拆分分区p_40:
suxing@PRODalter table p_test split partition p_40 at(50)
2into (partition p_400,partition p_max);
Table altered.
#分区p_40已经拆分完成 。
---再次查看分区情况:
suxing@PRODSELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME
2FROM USER_TAB_PARTITIONS;
TABLE_NAMEPARTITION_NAMETABLESPACE_NAME
--------------- --------------- ------------------------------
P_TESTP_400USERS
P_TESTP_10MYSPACE
P_TESTP_20USERS
P_TESTP_30MYSPACE
P_TESTP_MAXUSERS
#分区已经成功 。
---查看新分两个分区的记录:
suxing@PRODselect * from p_test partition (p_400);
ID NAMECREATED
---------- ---------- -------------------
44 susu2016-12-05 09:53:59
suxing@PRODselect * from p_test partition (p_MAX);
ID NAMECREATED
---------- ---------- -------------------
55 susu2016-12-05 09:54:06
#拆分前,最大的分区共有两条数据记录,拆分后,两个新分区各得一条记录 。
#拆分分区的前提条件是分区表有maxvalue分区 , 如果该分区表的(除自动分区表)没有该分区的,只能使用
alter table table_name add partition partition_name 来添加新分区 。
而有maxvalue分区的一般通过拆分方式添加新分区 。
---尝试直接add方式给没有maxvalue分区的分区表添加新分区:
suxing@PRODalter table p_test add partition p_500
2values less than (60) tablespace myspace;
alter table p_test add partition p_500
*
ERROR at line 1:
ORA-14074: partition bound must collate higher than that of the last partition
#报错,不能添加新分区 。
----交换分区:
---创建另外的普通测试表:
suxing@PRODcreate table pp_test(
2id number(2),
3name varchar2(10),
4created date);
Table created.
---往测试表pp_test插入3条记录:
insert intopp_test values(41,'susu',sysdate);
insert intopp_test values(42,'susu',sysdate);
insert intopp_test values(43,'susu',sysdate);
suxing@PRODcommit;
---查看测试表pp_test的数据记录:
suxing@PRODselect * from pp_test;
ID NAMECREATED
---------- ---------- -------------------
41 susu2016-12-05 16:26:19
42 susu2016-12-05 16:26:48
43 susu2016-12-05 16:26:50
---查看分区表分区p_400的记录:
suxing@PRODselect * from p_test partition (p_400);
ID NAMECREATED
---------- ---------- -------------------
44 susu2016-12-05 09:53:59
---进行分区交换:
suxing@PRODalter table p_test exchange partition p_400 with table pp_test;
Table altered.
#交换完成 。
---再次查看测试表pp_test记录:
suxing@PRODselect * from pp_test;
ID NAMECREATED
---------- ---------- -------------------
44 susu2016-12-05 09:53:59
---再次查看分区表分区p_400的记录:
suxing@PRODselect * from p_test partition (p_400);
ID NAMECREATED
---------- ---------- -------------------
41 susu2016-12-05 16:26:19
42 susu2016-12-05 16:26:48
43 susu2016-12-05 16:26:50
#分区交换成功 。
分区表管理:合并分区
vi编辑器相关命令
ITPUB论坛 | chinaunix博客 | chinaunix论坛
北京皓辰网域网络信息技术有限公司. 版权所有
oracle11g自动分区在Oracle10g中,没有定义间隔分区,只能通过范围分区实现间隔分区功能,如果要实现自动创建分区,只能通过创建JOB或者scheduler来实现;而在11g中,Oracle直接提供了间隔分区功能,大大简化了间隔分区的实现 。
----注:oracle11g虽然可以自动分区,但是分区的名字不能自定义,对于需要定时删除分区时没法处理,不如通过时间范围来手工分区 。详见
create table HIP_LOG_NODE_Part
(
IDVARCHAR2(32)not null,
RECORD_TIMEDATE
)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分裂分区怎么使,具体的语句是什么意思?将一个分区拆成两个:
ALTER TABLE tab_2
SPLIT PARTITION pm AT (to_date('20120310','yyyymmdd'))
INTO (PARTITION p2,
PARTITION pm)
关于oracle如何拆分分区和oracle数据拆分的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读