分区表管理

1、创建用户
create tablespace TBS_PART datafile ‘/u01/app/oracle/oradata/PROD1/tbs_part_1.dbf’ size 10m;
create tablespace TBS_INX datafile ‘/u01/app/oracle/oradata/PROD1/tbs_inx_1.dbf’ size 10m;
create user part identified by part default tablespace TBS_PART;
grant dba to part;

2、创建范围分区
conn part/part

CREATE TABLE sales_parts (serial_id NUMBER(10,0),
goods_id NUMBER(10,0),unit_price NUMBER(12,2),
quantity NUMBER(12,2),subtotal NUMBER(12,2),
create_date date)
PARTITION BY RANGE (create_date)
(PARTITION p1998 VALUES LESS THAN (to_date(‘1999-01-01’,‘YYYY-MM-DD’)) TABLESPACE TBS_PART,
PARTITION p1999 VALUES LESS THAN (to_date(‘2000-01-01’,‘YYYY-MM-DD’)) TABLESPACE TBS_PART,
PARTITION p2000 VALUES LESS THAN (to_date(‘2001-01-01’,‘YYYY-MM-DD’)) TABLESPACE TBS_PART,
PARTITION p2001 VALUES LESS THAN (to_date(‘2002-01-01’,‘YYYY-MM-DD’)) TABLESPACE TBS_PART,
PARTITION p2002 VALUES LESS THAN (to_date(‘2003-01-01’,‘YYYY-MM-DD’)) TABLESPACE TBS_PART,
PARTITION P_MAX VALUES LESS THAN (MAXVALUE));

–创建HASH分区
CREATE TABLE SALES_DATA (
TICKET_NO NUMBER,
SALE_YEAR INT NOT NULL,
SALE_MONTH INT NOT NULL,
SALE_DAY INT NOT NULL)
PARTITION BY HASH(SALE_YEAR)
PARTITIONS 8
STORE IN (TBS_PART);

2、插入数据
insert into sales_parts select prod_id,cust_id,channel_id,promo_id,QUANTITY_SOLD,time_id from SH.SALES;

查看分区的使用情况
SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,HIGH_VALUE FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER=‘PART’ and TABLE_NAME=‘SALES_PARTS’;

TABLE_OWNER TABLE_NAME PARTITION_NAME TABLESPACE_NAME HIGH_VALUE


PART SALES_PARTS P1998 TBS_PART TO_DATE(’ 1999-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA
PART SALES_PARTS P1999 TBS_PART TO_DATE(’ 2000-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA
PART SALES_PARTS P2000 TBS_PART TO_DATE(’ 2001-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA
PART SALES_PARTS P2001 TBS_PART TO_DATE(’ 2002-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA
PART SALES_PARTS P2002 TBS_PART TO_DATE(’ 2003-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, 'NLS_CALENDAR=GREGORIA
PART SALES_PARTS P_MAX TBS_PART MAXVALUE

查看分区表的数据
select count(1) from part.SALES_PARTS partition (P1999);

3、创建索引
create index part.serial_id_idx_part on part.sales_parts (serial_id)
local
(
partition p1 tablespace TBS_INX,
partition p2 tablespace TBS_INX,
partition p3 tablespace TBS_INX
);

create index serial_id_idx on sales_parts (serial_id) local tablespace TBS_INX PARALLEL 12;
create index TICKET_NO_idx on SALES_DATA (TICKET_NO) local tablespace TBS_INX PARALLEL 12;

select INDEX_OWNER,index_name,partition_name,high_value,status from DBA_IND_PARTITIONS WHERE INDEX_OWNER=‘PART’;
INDEX_OWNER INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS


PART SERIAL_ID_IDX P_MAX MAXVALUE USABLE
PART SERIAL_ID_IDX P2002 TO_DATE(’ 2003-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA USABLE
PART SERIAL_ID_IDX P2001 TO_DATE(’ 2002-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA USABLE
PART SERIAL_ID_IDX P2000 TO_DATE(’ 2001-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA USABLE
PART SERIAL_ID_IDX P1999 TO_DATE(’ 2000-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, ‘NLS_CALENDAR=GREGORIA USABLE
PART SERIAL_ID_IDX P1998 TO_DATE(’ 1999-01-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’, 'NLS_CALENDAR=GREGORIA USABLE

4、分割分区
alter table part.SALES_PARTS split partition P_MAX at (TO_DATE(‘2004-01-01 00:00:00’,‘YYYY-MM-DD HH24:MI:SS’)) into (partition P2003,partition P_MAX) update indexes;
alter table part.SALES_PARTS split partition P_MAX at (TO_DATE(‘2005-01-01 00:00:00’,‘YYYY-MM-DD HH24:MI:SS’)) into (partition P2004,partition P_MAX) update indexes;
alter table part.SALES_PARTS split partition P_MAX at (TO_DATE(‘2006-01-01 00:00:00’,‘YYYY-MM-DD HH24:MI:SS’)) into (partition P2005,partition P_MAX) update indexes;

4、重命名索引
alter index part.SERIAL_ID_IDX_PART rename partition P2003 to P4;

5、重建失效索引
ALTER INDEX part.SERIAL_ID_IDX_PART REBUILD PARTITION P1 ONLINE PARALLEL;

6、删除分区
alter table part.SALES_PARTS drop partition P2003;
alter index index_saleprice drop partition p1;

https://blog.csdn.net/tonyzhou_cn/article/details/10295247 分区索引失效的情况

梳理数据库中的分区表信息
1、查出所有的非系统用户的分区表
select distinct TABLE_OWNER,TABLE_NAME FROM DBA_TAB_PARTITIONS where table_owner not in (‘SYS’,‘SYSTEM’) order by 1;
查看数据库中所有的分区表信息(用户,分区表类型,子分区表类型)
SQL> select
OWNER,
TABLE_NAME,
PARTITIONING_TYPE,
SUBPARTITIONING_TYPE,
PARTITION_COUNT,
DEF_SUBPARTITION_COUNT,
INTERVAL
from DBA_PART_TABLES;

Tip:PARTITIONING_TYPE是RANGE,INTERVAL不为空说明是间隔分区。

2、查询每个分区表的详细信息
SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,HIGH_VALUE FROM DBA_TAB_PARTITIONS
WHERE HIGH_VALUE IS NOT NULL table_owner not in (‘SYS’,‘SYSTEM’) ORDER BY 1,2,3;

猜你喜欢

转载自blog.csdn.net/weixin_44524950/article/details/86502159