Oracle 分区操作

- 删除分区

ALTER TABLE table_name DROP PARTITION partition_name;
ALTER INDEX table_name REBUILD(如果含有全局索引);

- 增加分区

ALTER TABLE table_name ADD PARTITION partition_name VALUES LESS THAN (TIMESTAMP' 2017-10-31 00:00:00');

- 合并分区

ALTER TABLE table_name MERGE PARTITIONS partition_1, partition_2 INTO PARTITION partition_2;
ALTER TABLE table_name MODIFY PARTITION partition_2 REBUILD UNUSABLE LOCAL INDEXES;

- 重命名分区

ALTER TABLE table_name RENAME PARTITION partition_1 TO partition_1;

- 分区拆分

ALTER TABLE table_name SPLIT PARTITION
PART_1 at
(TO_DATE(' 1994-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'))
INTO ( PARTITION PART_1 tablespace st1,
PARTITION PART_3 tablespace users);


- truncate分区

ALTER TABLE table_name TRUNCATE PARTITION partition_name;
ALTER INDEX index_name REBUILD;



 分区字段更新

- 原则上不允许手动更新分区字段,row movement策略如果是disabled的状态,不能跨分区更新分区字段

select table_name,owner,row_movement from dba_tables where table_name = 'table_name';


- 强制更新分区字段

-- 修改该策略
alter table schema.table_name enable row movement;
-- 执行语句
--- 要执行更新的分区表
-- 修改回来
alter table schema.table_name disable row movement;



 分区操作前做失效索引操作

ALTER TABLE table_name DISABLE CONSTRAINT ipx_name;
ALTER TABLE table_name TRUNCATE PARTITTION partition_name;
-- 恢复索引
ALTER TABLE table_name ENABLE CONSTRAINT ipx_name;


- 分区表信息查询

select utp.table_name,utp.partition_name,utp.tablespace_name from user_tab_partitions utp
where utp.table_name='表名';


- 分区信息和索引信息聚合

SELECT INDEX_NAME, NULL PARTITION_NAME, TABLESPACE_NAME, STATUS
  FROM USER_INDEXES
 WHERE TABLE_NAME = '表名'
   AND PARTITIONED = 'NO'
UNION
SELECT INDEX_NAME, PARTITION_NAME, TABLESPACE_NAME, STATUS
  FROM USER_IND_PARTITIONS
 WHERE INDEX_NAME IN (SELECT INDEX_NAME
                        FROM USER_INDEXES
                       WHERE TABLE_NAME = '表名')
 ORDER BY 1, 2, 3;

  

原文地址:https://www.cnblogs.com/fubinhnust/p/9928855.html