由于项目运行时间较久,导致ORACLE表中记录数太多,对这个表(以下称table1)的操作也比较多,包括查询更新,最后导致对table1的操作消耗cpu猛增,最后网站不能访问。

由于知道是这个问题,所以就打算将历史数据备份,仅留最近一个月的数据在table1中。

1、方案1:根据某个与时间相关的字段,一年一年的删除

delete from table1 where data_id like '_2015'; data_id 是包含时间字段的产品id。

问题:由于table1的表数据量大,仅仅查询其中一条记录都耗时几分钟,所以一年一年删除的速度特别慢,让人以为出错的感觉。删除2015年数据耗时一个小时都没有删除掉。适用于对这个表的操作还不算太慢的情况下。

2、方案2:

步骤如下:

采用链接中的步骤

1) 备份所有数据到另外一张表baktable1
create table baktable1 as select * from table1;
2) 备份最近一个月的数据到一张临时表temptable1中
create table temptable1 as select * from table1 where input_date > to_date("2017-05-01","yyyy-MM-dd");
3)删除表table1中的数据
truncate table table1 ;
4) 删除表table1
drop table table1;
5) 创建table1,把最近一个月的数据倒回来
create table1 as select * from temptable1 ;
6) 删除临时表

我采用了方案2,因为方案1执行感觉不知道什么时候能结束。然而系统第二天一直出错,有文件上传可以解析,但是不能显示在网站上面。经过了十个小时的艰苦奋斗,终于找到了原因。因为
create table temptable1 as select * from table1 where input_date > to_date("2017-05-01","yyyy-MM-dd");
这条语句,除了能把表结构复制过来、数据复制过来之外,别的不会复制过来。比如说索引、主键、默认值,在这里主要是默认值丢失。

可以将方案2 优化如下:

1) 备份所有数据到另外一张表baktable1

create table baktable1 as select * from table1;

2) 备份最近一个月的数据到一张临时表temptable1中

create table temptable1 as select * from table1 where input_date > to_date("2017-05-01","yyyy-MM-dd");

3)删除表table1中的数据

truncate table table1 ;

4) 把最近一个月的数据插入到table1  这里和方案2 不一样

insert  into table1 (select * from temptable1);

5) 删除临时表

drop table  temptable1;

如果已经采用了方案2

1、插入主键、索引
2、设置默认值
alter table table1 modify tag default 'S';
alter table table1 modify input_date default sysdate;
查看表的默认值设置:
select
t.nullable as 是否为空,
t.data_default as 默认值
from USER_TAB_COLS t where TABLE_NAME ='NMC_DATA';

参考:http://www.cnblogs.com/songling/archive/2013/08/24/3279588.html

ORACLE一次大量数据删除导致问题的处理相关推荐

  1. 误删oracle数据库文件,误删Oracle数据文件导致数据库无法打开

    笔者最近接到同事求助,哥们在数据库关闭的情况下删除了部分数据文件导致数据库无法打开. 下面是总结一下此类问题的解决方式: --------------------------------------- ...

  2. oracle大量数据删除

    oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...

  3. oracle删除多条从js到java_一次oracle大量数据删除经历

    oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...

  4. 一次oracle大量数据删除经历

    oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...

  5. plsql删除大量数据_一次oracle大量数据删除经历

    oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...

  6. 近千人观看live,晚8点继续安排,2个CPU过高案例+1个文件数据删除案例-Oracle故障分析的方法论+DBA能力提升要领...

    主题摘要 接3月18日的上期分享,结合分享者多年来在主管运维工作中的故障处理实战经验,通过5个独立且有代表性的Oracle故障案例,深入浅出地解读故障分析思路并挖出故障背后的真相,继而抛砖引玉介绍Or ...

  7. Oracle数据库重复数据删除的三种情况

    在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢? 重复数据删除技术可以提供更大的备份容量,实现更长 ...

  8. 高效删除Oracle数据库中重复数据,并保留最新一条的方法

    在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢? 重复数据删除技术可以提供更大的备份容量,实现更长 ...

  9. Oracle Data purge(Oracle一键数据删除)

    Oracle数据批量删除 1. 备份要删除数据的表 通常可以选用Rman来备份想要删除数据的表. EXPDB命令,把文件dump下来, 文件格式F****.dmp (可以把表包含索引之类的打包备份下来 ...

最新文章

  1. php html 变量,PHP与HTML混编,使用PHP变量代替数据--20190221
  2. 8运行不了_好消息!十堰新建28座充电站,年底投入运行
  3. oracle gtx,ORACLE
  4. react特性-声明式编程
  5. Ajax Login Sample
  6. Anaconda安装,linux操作系统学习
  7. centos7开放80端口_Centos7.4系统 httpd模式搭建文件服务器
  8. 面试官:谈谈你对IO流和NIO的理解
  9. 证券交易4-PB系统简介
  10. 芭蕉树上第十三根芭蕉--opencv第一个测试程序遇到问题
  11. cdr 表格自动填充文字_6个excel表格制作技巧,熟练掌握,工作效率加倍
  12. 荣耀magicbookpro升级鸿蒙,魔法互传功能再升级 荣耀MagicBook 2019发布 售价3999元起...
  13. springboot发送邮件
  14. python—简单的数据抓取一(简单的文字数据抓取(认识cookie)、简单的图片抓取)
  15. JDK8升至JDK11 新特性整理
  16. 买鞋买包包之——猪牛羊皮的特色与辨别
  17. 汇编语言--test和cmp区别
  18. android 四大组件Broadcast Receiver
  19. java实现多媒体播放器_Java swing实现简单的视频多媒体播放器源码附带视频指导运行教程...
  20. js设计模式与开发实践(读书笔记)

热门文章

  1. java构建器出错nullpoint_空指针错误 java.lang.NullPointerException 浅谈
  2. 22.裸板--I2C协议
  3. 变量的作用域和生存期:_生存分析简介:
  4. 服务器存储视频文件夹在哪里找,微信视频文件夹存储在什么位置?在哪里能找到...
  5. 计算机三级网络技术考试容易吗,计算机三级网络技术难吗?
  6. 微软的黑屏说明了什么?
  7. 计算机控制系统z变换公式,计算机控制系统03 Z变换.ppt
  8. Drupal 模块开发基本教程(二)
  9. python制作翻译小软件_如何基于Python制作有道翻译小工具
  10. 计算机科学数学基础及教材推荐(转)