1.确定时间段:和客户沟通后确定需要清理的分区时间段,一般建议数据保留6个月。
2.确定对应分区:找到mytable_history表的所有分区, HIGH_VALUE-1对应的值是actiondate:
用p_user用户登录
select partition_name,high_value from user_tab_partitions where table_name='mytable_history' ORDER BY PARTITION_NAME; PARTITION_NAME HIGH_VALUE ------------------------------ -------------------------------------------- P_MYTAB_0604 TO_DATE(' 2006-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0605 TO_DATE(' 2006-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0606 TO_DATE(' 2006-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0607 TO_DATE(' 2006-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0608 TO_DATE(' 2006-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0609 TO_DATE(' 2006-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0610 TO_DATE(' 2006-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0611 TO_DATE(' 2006-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0612 TO_DATE(' 2007-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0701 TO_DATE(' 2007-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0702 TO_DATE(' 2007-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0703 TO_DATE(' 2007-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0704 TO_DATE(' 2007-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0705 TO_DATE(' 2007-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0706 TO_DATE(' 2007-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0707 TO_DATE(' 2007-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0708 TO_DATE(' 2007-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0709 TO_DATE(' 2007-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0710 TO_DATE(' 2007-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0711 TO_DATE(' 2007-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') P_MYTAB_0712 TO_DATE(' 2008-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') SUBNHIS_P_OTHER MAXVALUE
找到其所有的分区,从而确定其要清理的分区,假定数据保留6个月(含当前月),那么下面的P_MYTAB_0702之前的分区都可以进行清理,确定要清理的分区名称为:P_MYTAB_0604~P_MYTAB_0701。
3.备份:对需要清理的表进行exp导出:
编写parfile文件,将需要清理的分区写在parfile文件中:
Vi mytab.par
tables=(mytable_history:P_MYTAB_0604,
mytable_history:P_MYTAB_0605,
mytable_history:P_MYTAB_0607,
mytable_history:P_MYTAB_0608,
mytable_history:P_MYTAB_0609,
mytable_history:P_MYTAB_0610,
mytable_history:P_MYTAB_0611,
mytable_history:P_MYTAB_0612,
mytable_history:P_MYTAB_0701)
保存退出。
开始做exp导出:
exp p_user_user/p_user_pwd parfile=mytab.par file=mytab_p0604_p0701.dmp log=exp_mytab_p0604_p0701.log buffer=6000000 statistics=none
exp后请检查其exp_mytab_p0604_p0701.log中是否有报错信息。
Exp后的dmp文件请备份到小磁带上,做好标签,永久保存。
4.清理:对历史分区进行truncate:
p_user用户登录
Alter table mytable_history truncate partition P_MYTAB_0604; Alter table mytable_history truncate partition P_MYTAB_0605; Alter table mytable_history truncate partition P_MYTAB_0606; Alter table mytable_history truncate partition P_MYTAB_0607; Alter table mytable_history truncate partition P_MYTAB_0608; Alter table mytable_history truncate partition P_MYTAB_0609; Alter table mytable_history truncate partition P_MYTAB_0610; Alter table mytable_history truncate partition P_MYTAB_0611; Alter table mytable_history truncate partition P_MYTAB_0612; Alter table mytable_history truncate partition P_MYTAB_0701;
若在truncate是遇到ORA-00054: resource busy and acquire with NOWAIT specified的报错,说明资源被占用中,请重复执行该语句。
5.还原:exp出来的dmp文件保存小磁带上进行永久保存,如果有需要可以将dmp文件导入还原:
imp my_user/my_pwd parfile=mytab.par file=mytab_p0604_p0701.dmp log=imp_mytab_p0604_p0701.log. ignore=y;
注:parfile同上面exp时的parfile,也可以只将需要imp的分区写入到parfile中。
这里做imp的时候一定要加ignore=y,不如因为导入的时候,会报错表已经存在,因为报错而立即终止,因此必须要加ignore=y参数才能保证数据继续导入。
6.其他事项:请在进行上述操作时,检查最后的分区是否为07年12月的分区,如果是07年12月的分区,需要dba在年底前对SUBNHIS_P_OTHER进行split。
建议在和客户沟通,确定数据保留时间后,驻点dba每月对过期的历史分区进行备份和truncate,形成数据下线制度。
2条评论
truncate历史分区后,还要重建表上的全局索引吧?
re TQ,该表上只有分区索引,所以不考虑全局索引了