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

Oracle 在11g/12c中进行分区

askTom 2017-03-22
271

问题描述

嗨,奇尔斯/康纳,

我们有10张表 (大小约510 gb)。
我们需要根据我们识别的某些列将这些非分区表转换为分区。

目前,我们在Oracle 11g上运行,没有直接选项可用于将非分区表转换为分区一 (我尝试通过运行DBMS_REDEFINITION在11g中进行示例测试,但它会持续运行数小时)。

在12c有直接命令-
创建表tb_test为
从对偶中选择rownum x,'junk' y
按级别连接 <= 1000;

更改表tb_test按范围 (x) 间隔 (100) 修改分区 (
分区p1值小于 (101)
);

执行dbms_stats.gather_table_stats (用户,'tb_test ');

你能建议哪种方法更好吗?
1.ti如何使用DBMS_REDEFINITION在11g中完成此操作 (考虑约束依赖性,索引,触发器)
2.如何使用ALTER命令在12c中完成 (考虑约束依赖性,索引,触发器)

提前谢谢!!

专家解答

将表从非分区转换为分区是一项12.2功能。所以你最大的障碍是升级到这个版本!

一旦你在12.2,你应该使用 “alter table... 修改分区”。由于它是单个命令,因此比使用dbms_redefinition更容易。你可以在网上做!

您还可以指定要索引是本地的还是全局的:

create table t ( x int, y int, z int ); 

create index iy on t (y);
create index iz on t (z);

alter table t modify partition by range (x) interval (100) (
  partition p1 values less than (100)
) update indexes (
  iy local,
  iz global
) online;

select index_name, partitioned 
from   user_indexes
where  table_name = 'T';

INDEX_NAME  PARTITIONED  
IY          YES          
IZ          NO
复制


https://blogs.oracle.com/sql/entry/12_things_developers_will_love#partition-online
http://docs.oracle.com/database/122/SQLRF/ALTER-TABLE.htm#GUID-552E7373-BF93-477D-9DA3-B2C9386F2877__GUID-81BABA76-0CE0-4A67-835A-BF004D28ABA4

如果您还没有准备好升级,您可以在Oracle-base上找到一个dbms_redefinition示例:

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

评论