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

Oracle 将具有3 TB CLOB的4亿行表转换为分区表的最佳实践

askTom 2018-02-07
409

问题描述

嗨,
我正在将非分区表转换为分区 (范围或Ref)。对于测试场景,我有一个包含50 GB数据 (3亿行) 和100 GB CLOB列数据的表。我测试了以下选项和时间不符合我的满意度。
1.创建表作为选择-花费8个小时
2. DBMS_REDIFINITION-花了6个小时
3.创建无CLOB列的选择表-15分钟
4.用空CLOB (硬编码) 创建表格作为选择-2小时15分钟
5. Alter table交换分区NoValidate-不到一分钟,但是数据位于错误的分区
6.导出/导入-我失去了计时
7.只需删除-10000万在2小时内。

对于100gb CLOB,如果需要6个小时,则3 TB将花费大量时间,并且无法停止在线和批量活动。

我的期望是,展望未来,我将能够保持表格的增长。但是,如果我需要花一些时间进行一次活动,那么我只有8个小时的窗口来执行一项任务。如果需要,我可以分成多个任务,但是应用程序应该能够在该窗口之后工作。基本上,如果我不在窗口,任务的分块不应影响在线/批处理。

谢谢
辛格

专家解答

如果你在找best这样做的方法:

-升级到12.2
-使用新的alter表...修改分区语法!

create table t as 
  select level x, 'stuff' y from dual
  connect by level <= 1000;

select count(*) from user_tab_partitions
where  table_name = 'T';

COUNT(*)   
         0
  
alter table t modify
  partition by hash (x) partitions 2 online ;
  
select count(*) from user_tab_partitions
where  table_name = 'T';

COUNT(*)   
         2 
复制


这是一个在线操作。您可以指定如何在流程中分区索引。

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/ALTER-TABLE.html#GUID-552E7373-BF93-477D-9DA3-B2C9386F2877__MODIFY_TO_PARTITIONED-297160C6

假设你不能在短期内做到这一点...

您是否尝试过并行化cta操作?这有什么区别?

您可以将clob拆分为单独的表吗?如果没有,为什么要测试不包括这些的cta?你必须在某个时候把它们加载到表上!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论