某分区表历史分区下线方案

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条评论

  1. re TQ,该表上只有分区索引,所以不考虑全局索引了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据