oracle如何删除历史数据,白菜oracle数据库历史分区表删除清理方案
白菜oracle数据库历史分区表删除清理方案(个人经验,版权所有,请勿转载)1.分区概述数据库采用分区方式来实现存储空间的循环利用,对于系统影响最大的就是数据库优化方式的转变,也就是从RBO( Rule BasedOptimizer )向CBO( Cost Based Optimizer )的转变。在使用表分区 ( partition )之前,Oracle数据库对其执行的SQL语句采用的是基于规.
白菜oracle数据库历史分区表删除清理方案 (个人经验,版权所有,请勿转载)
1.分区概述
数据库采用分区方式来实现存储空间的循环利用,对于系统影响最大的就是数据库优化方式的转变,也就是从RBO( Rule Based
Optimizer )向CBO( Cost Based Optimizer )的转变。在使用表分区 ( partition )
之前,Oracle数据库对其执行的SQL语句采用的是基于规则的优化方式( Rule Based Optimizer
),此种优化方式是通过语法实现的,因为它根据语句语法和有关数据结构的数据字典信息,以确定将使用哪一个执行计划,这也是早期 Oracle
缺省的优化方式;但是当数据库系统从普通表转换到分区表后 Oracle 就会强制使用基于成本的优化方式( Cost Based
Optimizer ),此种优化方式是通过统计实现的,因为它使用为 SQL 语句调用的对象而创建的统计,来确定最有效的执行计划,这也是
Oracle8i 之后推荐的优化方式。
2.表分区方法的策略
表中的所有数据根据特定时间字段值的范围转化为表分区结构的方法,
此方法可以比较容易地根据Oracle数据库的表分区结构备份、删除和恢复表分区中的数据.
3. 确定删除数据
3.1 确定已经删除的分区高值,根据表分区存在的最小日期确定
select
table_name(表名),partition_name(分区名),num_rows(分区内记录数) from
user_tab_partitions where table_name=分区表名称
3.2 确定需要删除的分区高值,数据保留要求和表分区的时间确定,保证分区删除的效率和可恢复性 对所有需要删除的分区表进行分析,保证统计数据的准确性,提高数据检索的效率, 进行全库备份,确保数据可恢复,分多次删除,因为分区数据数量较大,避免占用额外的临时空间.
4. 删除表分区
4.1 逻辑执行:
以表table_A删除分区p1到pn为例,建立一个与table_A表结构一样的临时空表(包括各索引等),执行partition
exchange命令交换Pn 表分区和此临时表,这样Pn
中的数据就到了临时表中,drop此临时表,该过程一次进行Pn-1次,即删除了原Pn表分区中的数据.
4.2 删除步骤
4.2.1 创建分区交换脚本
4.2.2 创建临时表和临时索引
4.2.3 交换分区数据到临时表
4.2.4 drop临时表,删除数据
4.2.5 分区删除步骤执行完成后,查看user_tab_partitions确认分区删除完成
Select
partition_name,num_rows from user_tab_partitions where
partition_name like
’%yyyymmdd’; 如果没有输出,说明正常
4.2.6 分区删除结束后,建议对全表进行分析,保证系统的最优性能
注意: 全部过程对系统的正常使用不会造成负面影响
更多推荐




所有评论(0)