如何快速删除在线数据

gingerkang 2014-06-30 04:07:33
有几个表分别有几千万的记录需要删除,同时有业务在跑,不能中断
有分区表,直接删除分区表很快,但是会导致全局索引不可用,会影响正常的业务,delete即使分批也很慢
请什么快的删除方法或好的建议?谢谢了!
...全文
210 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lamb218 2014-07-03
  • 打赏
  • 举报
回复
如果这种删除属于常态,在设计表的时候就应该建立12个表,每个月一个表,这样操作也应该效率会很高吧
卖水果的net 2014-07-03
  • 打赏
  • 举报
回复
建议采用蚂蚁啃骨头的方法,每 10 分钟提交一个任务,每次删除一批(比如:10W 条),一天就可以啃掉 1440W 条,如果你 8000W 条,有 5 天半就啃完了,这样对业务影响也比较小。
空心兜兜 2014-07-02
  • 打赏
  • 举报
回复
为什么要删除在线数据?
Chuck_Perry 2014-07-02
  • 打赏
  • 举报
回复
非得一下删了吗?一天删一点可以吗?
  • 打赏
  • 举报
回复
引用 3 楼 wildwave 的回复:
这个就需要权衡了 1. truncate分区以后再重建索引。在此期间业务的相关语句的查询效率可能会受到影响 2. 分批delete以后再truncate,索引不会失效。但删除时间较长 3. 临时创建一个local索引,用来在全局索引失效时临时使用。两个索引的字段不能相同,但可以在原全局索引的字段后面加一个占用空间较小的字段来绕过去。然后truncate分区,再重建全局索引,最后删除临时的local索引。临时索引会占用额外的空间
学习!
gingerkang 2014-06-30
  • 打赏
  • 举报
回复
引用 4 楼 AcHerat 的回复:
还是建议去分批delete,再truncate。 几千万肯定是几个月积累下来的,没有实时去删除吧!要不搞一个作业找个业务量发生较少的时间段去删除。
是呀,1年前整理了下数据,后面一直没有怎么维护数据,现在发现数据越来越多,磁盘有点吃紧了,反正感觉后面麻烦会越来越多,需要制定一个相对有效的计划来处理这些数据了
gingerkang 2014-06-30
  • 打赏
  • 举报
回复
引用 3 楼 wildwave 的回复:
这个就需要权衡了 1. truncate分区以后再重建索引。在此期间业务的相关语句的查询效率可能会受到影响 2. 分批delete以后再truncate,索引不会失效。但删除时间较长 3. 临时创建一个local索引,用来在全局索引失效时临时使用。两个索引的字段不能相同,但可以在原全局索引的字段后面加一个占用空间较小的字段来绕过去。然后truncate分区,再重建全局索引,最后删除临时的local索引。临时索引会占用额外的空间
谢谢,我会逐步尝试的
AcHerat 2014-06-30
  • 打赏
  • 举报
回复
还是建议去分批delete,再truncate。 几千万肯定是几个月积累下来的,没有实时去删除吧!要不搞一个作业找个业务量发生较少的时间段去删除。
小灰狼W 2014-06-30
  • 打赏
  • 举报
回复
这个就需要权衡了 1. truncate分区以后再重建索引。在此期间业务的相关语句的查询效率可能会受到影响 2. 分批delete以后再truncate,索引不会失效。但删除时间较长 3. 临时创建一个local索引,用来在全局索引失效时临时使用。两个索引的字段不能相同,但可以在原全局索引的字段后面加一个占用空间较小的字段来绕过去。然后truncate分区,再重建全局索引,最后删除临时的local索引。临时索引会占用额外的空间
gingerkang 2014-06-30
  • 打赏
  • 举报
回复
引用 1 楼 z_shousi 的回复:
Truncate Table --不可回滚
不是删除所有数据,只是部分数据,几个月之前的数据,删的时候要有业务在跑,在写数据的
  • 打赏
  • 举报
回复
Truncate Table --不可回滚

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧