oracle 分区

 

1.查看现在oracle的大表sql:

 1 select owner, segment_name, segment_type, num_ext, tot
 2   from (select owner,
 3                segment_name,
 4                segment_type,
 5                sum(extents) as num_ext,
 6                sum(bytes) / 1024 / 1024 tot
 7           from dba_segments
 8          group by owner, segment_name, segment_type
 9          order by sum(bytes) desc) t
10  where rownum < 10

一张大表如果加上了业务逻辑,表明你可以考虑进行分区。当我们分区一张表会需要更多的设置与维护的工作。

所以在最初设计时能预计到增长速度的时候。而不是等以后增长到难以处理的时候进行分区。

 

--1.找出比较大的表
select owner, segment_name, segment_type, num_ext, tot
from (select owner,
segment_name,
segment_type,
sum(extents) as num_ext,
sum(bytes) / 1024 / 1024 tot
from dba_segments
group by owner, segment_name, segment_type
order by sum(bytes) desc) t
where rownum < 10

--2.范围分区表 partition by rang
create table p_rang_test
( id number,
name varchar2(20),
sex char(2)
)
partition by range(id)
(
partition p_200 values less than(200),
partition p_400 values less than(400),
partition p_600 values less than(600),
partition p_max values less than(maxvalue)
);

--3.hash分区

create table p_hash_test
( id number,
name varchar2(20),
sex char(2)
)
partition by hash(id);

--4.列表分区
create table p_list_test
( id number,
name varchar2(20),
sex char(2)
)
partition by list(sex)
(
partition nan_1 values('男'),
partition nv_1 values('女'),
partition def_1 values(default)
)

--5.可以将每个分区移动到指定的表空间。
create tablespace tt1 datafile'D:\ORACLE\ADMINISTRATOR\ORADATA\YFTEST\tt1.dbf' size 100m;
alter table p_rang_test move partition p_200 tablespace tt1;

SQL> select * from dba_segments t where t.owner='TEST';


OWNER SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE SEGMENT_SUBTYPE TABLESPACE_NAME HEADER_FILE HEADER_BLOCK BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE RETENTION MINRETENTION PCT_INCREASE FREELISTS FREELIST_GROUPS RELATIVE_FNO BUFFER_POOL FLASH_CACHE CELL_FLASH_CACHE
------------------------------ -------------------------------------------------------------------------------- ------------------------------ ------------------ --------------- ------------------------------ ----------- ------------ ---------- ---------- ---------- -------------- ----------- ----------- ----------- ---------- --------- ------------ ------------ ---------- --------------- ------------ ----------- ----------- ----------------
TEST T TABLE ASSM USERS 4 165658 18874368 2304 33 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST CHECK_TEST TABLE ASSM USERS 4 172906 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_RANG_TEST P_200 TABLE PARTITION ASSM TT1 13 130 65536 8 1 65536 1048576 1 2147483645 2147483645 13 DEFAULT DEFAULT DEFAULT
TEST P_RANG_TEST P_400 TABLE PARTITION ASSM USERS 4 172922 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_RANG_TEST P_600 TABLE PARTITION ASSM USERS 4 172930 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_RANG_TEST P_MAX TABLE PARTITION ASSM USERS 4 172938 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_HASH_TEST SYS_P21 TABLE PARTITION ASSM USERS 4 172946 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_LIST_TEST NAN_1 TABLE PARTITION ASSM USERS 4 172954 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_LIST_TEST NV_1 TABLE PARTITION ASSM USERS 4 172962 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT
TEST P_LIST_TEST DEF_1 TABLE PARTITION ASSM USERS 4 172970 65536 8 1 65536 1048576 1 2147483645 2147483645 4 DEFAULT DEFAULT DEFAULT

10 rows selected

SQL> SELECT TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='P_RANG_TEST'
2 /

TABLE_NAME PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
P_RANG_TEST P_200 TT1
P_RANG_TEST P_400 USERS
P_RANG_TEST P_600 USERS
P_RANG_TEST P_MAX USERS

--6.自动移动到不同分区。
如果我们需要更新一个分区的键值,浙江导致这条记录归属不同的分区。
update f_regs set id=201 where id=199;
这样我们会收到错误信息:ora-14402

办法是 使用:
alter table p_rang_test enable row movement;
如果要禁止迁移则使用 disable row movement;

--7.重命名分区

alter table p_rang_test rename partition p_200 to p_201;

   

  

posted @ 2015-07-01 15:48  修行从29开始  阅读(168)  评论(0编辑  收藏  举报