当前位置:首页 > 开发 > 数据库 > 正文

Oracle表维护 快速备份删除数据

发表于: 2014-09-05   作者:cuisuqiang   来源:转载   浏览:
摘要: 我知道oracle表分区,不过那是数据库设计阶段的事情,目前是远水解不了近渴。 当前的数据库表,要求保留一个月数据,且表存在大量录入更新,不存在程序删除。 为了解决频繁查询和更新的瓶颈,我在oracle内根据需要创建了索引。但是随着数据量的增加,一个半月数据就要超千万,此时就算有索引,对高并发的查询和更新来说,让然有所拖累。 为了解决这个问题,我一般一个月会进行一次数据库维护,主要工作就是备

我知道oracle表分区,不过那是数据库设计阶段的事情,目前是远水解不了近渴。

当前的数据库表,要求保留一个月数据,且表存在大量录入更新,不存在程序删除。

为了解决频繁查询和更新的瓶颈,我在oracle内根据需要创建了索引。但是随着数据量的增加,一个半月数据就要超千万,此时就算有索引,对高并发的查询和更新来说,让然有所拖累。

为了解决这个问题,我一般一个月会进行一次数据库维护,主要工作就是备份oracle数据库内一个月以前的数据,然后从表内删除这些数据。

之前的做法是这样的:

1:备份数据

create table MY_TEMP as select * from TEMP t where t.create_time < to_date('2014-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss');

 

2:删除数据

delete from TEMP t where t.create_time < to_date('2014-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss');

 

3:重建索引

alter index indexname rebuild;

 

当然这几步都需要停止业务防止新录入数据,且oracle执行时耗时较久。

 

那么今天我尝试了一个新的办法。

1:备份要留下的数据

create table MY_TEMP as select * from TEMP t where t.create_time > to_date('2014-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss');

 

2:重命名表,也把原来表整个备份

rename TEMP to TEMP_0701_0801;
rename MY_TEMP to TEMP;

 

3:新增索引和主键

create index TEMP_INDEX_NAME on TEMP (COL_NAME);
alter table TEMP add constraint TEMP_PK primary key (ID);

 

4:删除数据

delete from TEMP_0701_0801 t where t.create_time > to_date('2014-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss');

 

比较耗时的是1和3,虽然4也很耗时,但是因为是独立出来的表,已经和业务无关,所以可以随时删除且对系统无影响。

但是要注意的是,新表是没有任何主键、外键、索引的,这里要重新创建

 

按照之前的方法,每次耗时都以小时计算,慢的要死。

按照后来办法去做以后,除了删数据没做,1、2、3下来,几百万数据表,半个小时搞定了

 

请您到ITEYE看我的原创

或支持我的个人博客,地址:http://www.javacui.com

 

Oracle表维护 快速备份删除数据

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
上文说了创建数据还原点的事,数据恢复的前提是我们在删除的时候使用了delete命令来删除,delete在
业务背景: 为了方便客户及时自动更新SAP库里面的数据与减少磁盘的空间。所以要在SQL对数据进行自动
1:重要参考 wiki 2: oracle doc 表空间参考 3:来自dba-oracle的参考 26,27,28,29 一: oracle 表
1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有
我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据重复,那么,如何对重复的数据进
一个表中 第一条和第二条数据重复,第四条和第五条数据重复,如果把需要把井号和井筒号字段作为主键
ORACLE表空间管理维护 2013-11-11 23:24 by 潇湘隐者, 7743 阅读, 6 评论, 收藏, 编辑 1:表空间概
rsync_Serverrsync服务端下载 rsync_Client rsync客户端下载 会应用到rsync主要是因为公司项目的需
在做类erp项目的时候因为代码没处理好导致内外部物料匹配表里面出现了很多重复数据,恰巧那张匹配表
MySQL删除表数据 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号