Oracle普通表转时间类型自动分区表

说明:以表USER_OFFICE为例,其中字段CREATE_DATE(Not Null)为时间类型字段,转为分区表并更换新的表空间

1)创建新的表空间

create tablespace new_space logging datafile '/oracle/db/new_space.dbf' size 32m autoextend on next 300m maxsize unlimited extent management local segment space management auto; 

2)建立导出文件存储目录并授权(用于第三步的方案一)
使用sys、systm等系统用户操作!
–建立DIRECTORY目录对象(存放dmp、log)

CREATE DIRECTORY exp_dir AS '/oracle/db/zone';

–授权用户user_local权限

GRANT READ, WRITE ON DIRECTORY exp_dir TO user_local;

3)转换表为时间类型自动分区表(按月分,建议方案二,速度更快)
方案一:导出–删除–创建–导入
A:expdp(导出)表USER_OFFICE

expdp user_local/user_local_@@ DIRECTORY=exp_dir DUMPFILE=tab.dmp LOGFILE=tab.log TABLES=USER_OFFICE

B:删除表USER_OFFICE

drop table USER_OFFICE;

C:创建USER_OFFICE同时以字段CREATE_DATE自动按月分区放在新表空间new_space

Create table USER_OFFICE(字段、主键。。。) tablespace new_space PARTITION BY RANGE (CREATE_DATE) INTERVAL ( NUMTOYMINTERVAL (1, 'MONTH') ) (PARTITION user_interval VALUES LESS THAN (TO_DATE ('20100101', 'yyyymmdd')) )

D:导入(过程中会数据自动分区)

impdp user_local/user_local_@@ DIRECTORY=exp_dir DUMPFILE=tab.dmp LOGFILE=tab.log TABLES=USER_OFFICE 
TABLE_EXISTS_ACTION=append REMAP_TABLESPACE=old_space:new_space

注释:TABLE_EXISTS_ACTION=append :追加数据
REMAP_TABLESPACE=old_space:new_space:原表空间old_space导出的数据导入至新表空间new_space中
如果导出dmp所使用用户与导入dmp所使用用户不同,则在导入命令后追加‘REMAP_SCHEMA=exp_user:imp_user’,格式为:导出用户:导入用户

方案二:改名–重创表并分区并灌数据–删除
A:修改表名
USER_OFFICE –>> USER_OFFICE_BACK

ALTER TABLE USER_OFFICE RENAME TO USER_OFFICE_BACK

B:重创表并分区并灌数据

Create table USER_OFFICE tablespace new_space PARTITION BY RANGE (CREATE_DATE) INTERVAL ( NUMTOYMINTERVAL (1, 'MONTH') ) (PARTITION user_interval VALUES LESS THAN (TO_DATE ('20100101', 'yyyymmdd')) ) AS SELECT * FROM USER_OFFICE_BACK;

C:创建主键
该方式创建新表加入数据方法,不主动创建主键,需后续手动创建

D:删除旧表USER_OFFICE_BACK

drop table USER_OFFICE_BACK;

如果需要可以保留!

4)重建索引等
表转换完成后,根据实际重新建立索引等

你可能感兴趣的:(数据库相关)