分区表

分区表分list,range,hash 分区

list是按列值分区,叫列表分区,分区列不能重复,没法分的放default里,default存在时不能再加新的分区

range是按范围分区,叫范围分区,没法分的放maxvalue里面

hash是将数据平均分配到指定的区域里,hash分区又叫散列分区,尽可能将数据平均放到各个分区里面,具体怎么放oracle说了算

参数含义:

nologging:不要日志

nocompress:不压缩

pctfree:块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到此上限时,新的数据将不能插入此块中,但是单位是什么?m?条?数值是10

initrans:每个块中处理行级锁事务,值是1表示表,值是2表示索引

maxtrans:最大并发事务

storage(

initial:分给segment的第一个extent的大小

next:下一个extent的大小

minextents:第一次创建时分配的大小

maxextents:随着数据量的增长,虽多可分配的extent的数量,unlimited是无限制

pctincrease:指定第三个及以后的extent相对于上一个所增长的百分比,如果值是0,那么所有新增的都和next一样

buffe_pool:定义缺省缓冲池

flash_cache:不知道,没搜到

cell_flash_cache :不知道没搜到

extent:就是block集


建list分区表:

建表的时候就要建成分区表,不能建普通表再转成分区表,麻烦

CREATE TABLE 表名(字段 字段类型)

PARTITION BY LIST(要按哪个字段分区的字段名)

(

PATITION 分区名 VALUES ('值')

TABLESPACE 表空间名

);

其他参数上面写了,就不重复了


建有default分区的list分区表

CREATE TABLE 表名(字段 字段类型)

PARTITION BY LIST(要按哪个字段分区的字段名)

(

PATITION 分区名 VALUES ('值')

PARTITION 分区名 VALUES(DEFAULT)

);

注意:default不能有引号,就是不能写成PARTITION 分区名 VALUES('DEFAULT'),否则就会把default当做值了


有了default分区后不能增加分区

如果一定要增加有两种方式

(方式一):

  可以通过先建临时表备份数据,再drop default分区,再新增分区,再增加default分区并将数据恢复的方式

备份数据采用CREATE TABLE 表名AS SELECT * FROM 分区表名 PARTITION (分区名) 的方式,不要加where 1=2,加上之后就只是建和分区表同表结构的表而已,不会将数据插到新表里面,与我们备份数据的目的不符,这种方式要快于先建表,再查处数据并插入到新表里面的方式

drop分区下面有讲

恢复数据用交换的方式,交换的原理是A表有数据,B表没数据,交换后变成A表没数据,B表有数据,就是把我的全给你,你的全给我,如果你本来没有,那给我的就是空

ALTER TABLE 分区表名 EXCHANGE PARTITION DEFAULT的分区名 WITH TABLE 临时表表名

(方式二):

  分裂分区,将原来的default分区按值分裂成两个分区,满足值条件的分成一个,不满足的留在default里面

ALTER TABLE 分区表名 SPLIT PARTITION DEFAULT的分区名 VALUES ('值') INTO (PARTITION 新分区名,PARTITION DEFAULT的分区名)


建range分区表:

CREATE TABLE 表名(字段 字段类型)

PARTITION BY RANGE (要按哪个字段分区的字段名)

(

PARTITION 分区名 VALUES LESS THAN  ('值')

);


加maxvalue分区的语句是:

ALTER TABLE 表名 ADD PARTITION 分区名 VALUES LESS THAN (MAXVALUE)

注意:建表时如果给了maxvalue时就不能加分区了,因为没有比maxvalue更大的值了


分裂maxvalue分区的语句是:

ALTER TABLE 分区表名 SPLIT PARTITION DEFAULT的分区名 AT('值') INTO (PARTITION 新分区名,PARTITION DEFAULT的分区名)


建hash分区表:

CREATE TABLE 表名(字段 字段类型)

PARTITION BY HASH(要按哪个字段分区的字段名)

(

PARTITION 分区名,

PARTITION 分区名

);


给list分区表加分区:

ALTER TABLE 用户名.表名 ADD PARTITION 分区名 VALUES ('分区名') TABLESPACE 表空间名


给range分区表加分区:

ALTER TABLE 用户名.表名 ADD PARTITION 分区名 VALUES LESS THAN (值)

注意:range分区表加分区时只能加一个比上次更大的分区,比如按日期分区,上次是20170101,下次加分区就要加20170101以后的日期,不能是小于20170101的日期,例如2016年的日期,否则会报错


给hash分区表加分区:

ALTER TABLE 用户名.表名 ADD PARTITION 分区名;


删除分区:

ALTER TABLE 用户名.表名 DROP PARTITION 分区名

注意:这样删除会删除掉分区以及分区内所有数据,分区名不需要加括号或者是引号等符号,直接打上去就可以,不会影响其他分区


删除分区内所有数据但保留分区:

DELETE FROM 用户名.表名 PARTITION (分区名)

注意:分区名要有括号,但不要引号,这样删除会保留分区,然后删除分区内所有数据,不会影响其他分区


查分区内所有数据:

SELECT * FROM 表名 PARTITION (分区名)


查询分区表相关信息在DBA_PART_TABLES

查询分区表的分区相关信息在DBA_TAB_PARTITIONS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值