ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 4108|回复: 16

删除大表相关咨询(delete 命令删除数小时)

[复制链接]
论坛徽章:
0
发表于 2016-12-28 19:51 | 显示全部楼层 |阅读模式
各位大神,刚刚学数据库不久,咨询一些问题。
目前有环境

oracle - 11.2.0.4 企业版
host - RHEL 6.7

数据库里有一张大表,大约100G左右,是做了分区的,现在有需求,选择性的删除里面的绝大部分数据。
只保留今年一年的数据。
数据库为生产库,无法关闭。

执行了以下命令,
delete from history_table where create_date < '20140401'
由于数据量大的缘故,数据库一直做删除,反复写回滚段与redo log,已执行数小时,还没结束。

请问个路大神,
1.强制终止掉会话(还在做 delete 操作)会有什么影响?
2.是否有其他好的删除方法?(要求不得 trancate 表)
3.是否要继续等下去?



非常感谢。
认证徽章
论坛徽章:
0
发表于 2016-12-29 07:58 | 显示全部楼层
是否是根据时间分区的?
来自安卓客户端来自客户端

使用道具 举报

回复
论坛徽章:
304
奥迪
日期:2013-07-29 13:45:59红旗
日期:2014-02-07 10:47:20路虎
日期:2014-02-13 10:34:03保时捷
日期:2014-02-14 09:46:462014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
发表于 2016-12-29 09:25 | 显示全部楼层
1  用 DEELTE 前,应该估算每一步要删除的数据量,选择的合适的数据量提交,避免回滚段,日志量等太大,
2  查看v$session_longops, 尝试下,能否看出,还要等多久才能完成。
3  若有机会重来,先重定义成删除字段的范围分区表,用 TRUNCATE PARTITION 功能,

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2016-12-29 09:32 | 显示全部楼层
hxd205 发表于 2016-12-29 07:58
是否是根据时间分区的?

感谢回复,range分区,但是交给系统自动分了,从名字无法判断时间。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2016-12-29 09:35 | 显示全部楼层
ZALBB 发表于 2016-12-29 09:25
1  用 DEELTE 前,应该估算每一步要删除的数据量,选择的合适的数据量提交,避免回滚段,日志量等太大,
2 ...

感谢大神回复,有机会重来。
按照您回复的第一种方案,打算写个循环,分段提交删除。

使用道具 举报

回复
论坛徽章:
304
奥迪
日期:2013-07-29 13:45:59红旗
日期:2014-02-07 10:47:20路虎
日期:2014-02-13 10:34:03保时捷
日期:2014-02-14 09:46:462014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
发表于 2016-12-29 09:36 | 显示全部楼层
Kim_s 发表于 2016-12-29 09:32
感谢回复,range分区,但是交给系统自动分了,从名字无法判断时间。

查看下分区字段,分区类型,INTERVAL 只能TRUNCATE,不能DROP,得考虑 update global indexes

使用道具 举报

回复
论坛徽章:
173
秀才
日期:2016-02-18 09:21:30目光如炬
日期:2016-01-03 22:00:00秀才
日期:2015-12-21 09:53:46目光如炬
日期:2015-12-20 22:00:00秀才
日期:2015-12-25 15:31:10秀才
日期:2015-12-14 15:02:13目光如炬
日期:2015-12-13 22:00:00秀才
日期:2015-12-14 14:56:09天枰座
日期:2015-12-02 13:02:15巨蟹座
日期:2016-01-30 22:10:33
发表于 2016-12-29 10:45 | 显示全部楼层
Kim_s 发表于 2016-12-29 09:32
感谢回复,range分区,但是交给系统自动分了,从名字无法判断时间。

名字无法判断,但可以从视图记录查找分区范围数据啊。
上来就用delete问题很大。这种明显就应该用truncate分区。

使用道具 举报

回复
论坛徽章:
173
秀才
日期:2016-02-18 09:21:30目光如炬
日期:2016-01-03 22:00:00秀才
日期:2015-12-21 09:53:46目光如炬
日期:2015-12-20 22:00:00秀才
日期:2015-12-25 15:31:10秀才
日期:2015-12-14 15:02:13目光如炬
日期:2015-12-13 22:00:00秀才
日期:2015-12-14 14:56:09天枰座
日期:2015-12-02 13:02:15巨蟹座
日期:2016-01-30 22:10:33
发表于 2016-12-29 10:49 | 显示全部楼层
1.强制终止掉会话(还在做 delete 操作)会有什么影响?
会出现大量回滚,问题不小。
2.是否有其他好的删除方法?(要求不得 trancate 表)
明显应该用truncate,delete就是瞎搞。
3.是否要继续等下去?
应该让undo保证足够大,否则最后还得报快照过旧的错,
如果不影响业务,建议加大undo后,等着吧。

使用道具 举报

回复
认证徽章
论坛徽章:
0
发表于 2016-12-29 10:52 | 显示全部楼层
Kim_s 发表于 2016-12-29 09:32
感谢回复,range分区,但是交给系统自动分了,从名字无法判断时间。

那就直接truncate 某分区,注意索引状态

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31
发表于 2016-12-29 11:03 | 显示全部楼层
1.强制终止掉会话(还在做 delete 操作)会有什么影响?
会出现大量回滚,回滚的时间也很长
2.是否有其他好的删除方法?(要求不得 trancate 表)
明显应该用truncate 分区,但要看该表是否有全局索引。如果有。需要update global indexes操作。如果不能用truncate的命令。就用delete分批次删除。根据时间段来删除。
3.是否要继续等下去?
应该让undo保证足够大,否则最后还得报快照过旧的错,
如果不影响业务,建议加大undo。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表