热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ORACLE历史数据管理策略数据清理

背景由于性能数据每天导入量,数据库表空间每天增长很快,且不需要太长的保存周期,为避免爆表,因此需要定制定期清理计划。数据的清理可以有多种方案,根据场景的不同可以分为离线,在线。后续

背景

由于性能数据每天导入量,数据库表空间每天增长很快,且不需要太长的保存周期,为避免爆表,因此需要定制定期清理计划。
数据的清理可以有多种方案,根据场景的不同可以分为离线,在线。后续又在可以细分。这里仅考虑在线方式数据里比如DELETE与 REDEFINITION,这种方式带来的问题就是会产生大量的LOG,同时产生回滚段,需要定期进行redefinition。为避免场景复杂,这里采用分区表方式。

分区方案

目前有两种方案,一种是按照ingerval分区,未定义分区oracle会智能分区,分区简单,但是带来的问题就是分区名字无法直接确定,后期维护不方便
这里不做重点介绍
使用虚拟列,固定分区名字,引入问题需要新增虚拟列,即本文使用方案。

关于索引

表分区以后,同时需要同步修改索引,这里根据我们的应用场景,需要构建LNP(LOCAL NON PREFIXED) INDEX–引入的虚拟列作为分区字段,没有其它功能。
如果需要构建唯一索引,LNP index必须包含分区键。
对于程序访问路径带来的变化就是最好显式的指定分区,如果不指定,即使匹配索引,也是匹配所有表的LNP IDNEX

select INDEX_NAME,PARTITIONING_TYPE,LOCALITY, ALIGNMENT from all_part_indexes where table_name='xxx'
select index_name,status from user_indexes where index_name='xxx'
select INDEX_NAME,PARTITION_NAME,status from User_Ind_Partitions a where a.Index_Name='xxx'

新增虚拟列

新增虚拟列语法

v_month as (substr(datadate,6,2))
partition by list(v_month)
(
partition p1 values('01'),
partition p2 values('02'),
partition p3 values('03'),
partition p4 values('04')
);

新增虚拟列不会增加存储空间消耗,但是会增加CPU消耗,即新增列的信息仅写入metadata.

SELECT TABLE_NAME,PARTITION_NAME,HIGH_VALUE FROM user_tab_partitions WHERE TABLE_NAME=
select TABLE_NAME,PARTITIONING_TYPE from user_part_tables where table_name='
select segment_name||' '||partition_name||' '||segment_type from user_segments where segment_name like

应用程序变化

SELECT

SELECT *

会现实虚拟列

INSERT

不支持

insert into table xx values()

需要显式指定插入列:

insert into table xx(col1,col2,...) values()

update

同insert

按月份分区数据清理

表按照月分区,共12个分区,数据保留3个月,每个月出清理三个月之前的分区数据,即清理脚本每月执行
生成truncate分区的脚本如下:

from datetime import date,timedelta
from monthdelta import MonthDelta
current_day = date.today()
prev_2mOnth= current_day- MonthDelta(2)
month_of_partition = prev_2month.month
print 'current day is:{0} and previous day of last 2 months is:{1},so the partition need to truncate is:{2}'.format(current_day,prev_2month,month_of_partition)
with open("partition_by_day_table") as f:
for table in f:
print 'alter table {0} truacate partition p{1}'.format(table.strip(),month_of_partition)

确定分区后,通过定时任务执行对应的SQL即可。

按天分区数据清理

表按照天分区,数据至少保留7天以上
表分区原则:表按天分区,共31个分区,每天清理8天前的分区,清理脚本每月执行
生成truncate分区的脚本如下:

#!/usr/bin/python
from datetime import date,timedelta,datetime
current_day = date.today()
prev_8day = current_day-timedelta(days=8)
day_of_partition = prev_8day.day
print 'current day is: {0} and previsus day of 8 day is:{1},so the partition need to trucate is:{2}'.format(current_day,prev_8day,day_of_partition)
print '#'*72
fout=open('/home/oracle/scripts/minute.log','a')
with open("/home/oracle/scripts/partition_by_day_tables") as f:
for table in f:
syntax= 'alter table {0} truacate partition p{1}'.ljust(72,' ').format(table.strip(),day_of_partition)+'; commit;\n'
#print syntax
fout.write(syntax)
now=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
fout.write(now+'\n')
f.close()
print '#'*72

对应的SQL脚本如下:

alter table xx1 truacate partition p3 ; commit;
alter table xx2 truacate partition p3 ; commit;
alter table xx3 truacate partition p3 ; commit;

确定分区后,通过定时任务执行对应的SQL即可。

定时脚本

通过crontab定时任务完成

5 4 * * * --daily
5 4 1 * * ---monthly

推荐阅读
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 本文探讨了如何在 F# Interactive (FSI) 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • C/C++ 指针操作解析:双向链表中元素的取消链接
    本文详细解释了在C语言中使用指针进行双向链表元素取消链接的操作,探讨了`next->prev`和`prev`之间的关系,并提供了代码示例和可视化辅助理解。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 基于机器学习的人脸识别系统实现
    本文介绍了一种使用机器学习技术构建人脸识别系统的实践案例。通过结合Python编程语言和深度学习框架,详细展示了从数据预处理到模型训练的完整流程,并提供了代码示例。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
author-avatar
fenfei2702936060
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有