暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 删除数十亿记录表

askTom 2018-09-19
308

问题描述

嗨,克里斯,嗨,康纳,

以理论的方式进行查询的Appology,但是我想请您提出一些我可以在以下情况下尝试的建议。

当我需要清理一张表 (例如订单) 时,有要求。25亿行。
由此我们需要清理大约200亿行。

我们在这里想的是,而不是删除200亿:


方法1:
1.使用cta创建副本,例如订单的订单表
2.截断原始表订单
3.将所需的50亿行插入原始表订单

方法2:
1.准备删除150亿条记录的脚本
2.创建新的表空间-我们的DBA团队将对此进行处理
3.将表和索引顺序移动到新表空间以回收空间
4.将表移回旧表空间
5.在点 #2中删除表空间创建

在这里,选择方法2的可能性很大,您能帮我获取以下几点的oracle命令吗

a. Delete将根据order_date列执行,因此是否可以共享任何引用或脚本来执行如此庞大的删除任务?
b.命令将表移动到新表空间 & 返回?

另外,仅出于我的理解,我尝试了现有表的cta,但是cta本身花费了太多时间来创建原始表的副本。
您是否建议在此处创建table的副本?

是的。我们有分区许可证。
下面是表结构:
表: 订单
列: 订单id号,
varchar2型
开始时间戳

表: 订单详情
列: 订单id号,
城市varchar
金额编号

要保留的数据基于订单。type = 'VALID' 和start_ts <输入日期

基于条件需要清理订单,并基于orderid从order_details

专家解答

好吧,这里有几个场景

场景 #1-您需要 * 保留 * 要归档的行

1) 创建空分区表

-分区p1值小于输入日期
-输入日期以上的分区p2值

每个都有2个子分区type = '有效,type = [其他一切]

2) 使用DBMS_REDEFINITION将表迁移到分区的表中

3) “更改表交换分区” 以删除不再希望附加到表的分区。

之后,您将存档数据的表,而ORDERS表将仅包含要保留的行

此过程将需要很长时间才能运行,但是唯一真正的停机时间是在步骤2期间。


场景2-你不在乎你想保留的200亿

1) 创建表ORDERS_SMALL parallel作为select /* parallel */fate orders,其中type = 'VALID' 和start_ts <输入日期。

并行加载和查询的速度与您在Oracle中移动数据的速度差不多。并将其设置为分区表,以便将来的归档更容易。

2) 下降表订单

3) 将ORDERS_SMALL重命名为订单

(您需要重新应用索引,授予等)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论