将Oracle表移动到正在编制索引的位置
我在实时生产环境中有一个Oracle表,该表的大小超过了半GB。是否可以将此普通Oracle表从堆组织更改为索引组织,或者仅通过将此表中的数据移动到另一个索引组织的新表来实现?无论哪种方式,如果您能列出此过程中涉及的步骤,我将不胜感激。无法更改表格使其成为索引组织的表格。相反,您可以重新定义表(使用),也可以使用CTA创建新表 例如:将Oracle表移动到正在编制索引的位置,oracle,Oracle,我在实时生产环境中有一个Oracle表,该表的大小超过了半GB。是否可以将此普通Oracle表从堆组织更改为索引组织,或者仅通过将此表中的数据移动到另一个索引组织的新表来实现?无论哪种方式,如果您能列出此过程中涉及的步骤,我将不胜感激。无法更改表格使其成为索引组织的表格。相反,您可以重新定义表(使用),也可以使用CTA创建新表 例如: create table t2 ( id number, first_name varchar2(20), constraint pk_id primary
create table t2 (
id number, first_name varchar2(20),
constraint pk_id primary key (id)
)
organization index
as select * from t1;
我从未使用过
DBMS\u重新定义
,但使用CTAS时,若表是生产的,那个么它并不是创建表的唯一步骤
select*from new减去select*from old;
或者如果您有插入行的标记,只需插入新行即可我希望列表是完整的。谢谢JSapkota。我在其他网站上看到了相同的评论,并且对如何使用DBMS_重新定义包有兴趣。例如,使用上面相同的SQL,如何使用DBMS_重新定义包,这样就不必创建新表t2,但t1是转换的您还需要使用新的物理结构创建新的临时表(在这里您可以定义表的组织)重新定义您的表及其相当长的过程。此文档链接提供了一些有用的示例:在不指定主键的情况下此操作有效吗?IOT必须有主键。@TS74-使用
dbms\u重新定义
仍然需要您创建一个新表t2
,移动数据,然后进行重命名。这是什么意思然而,软件包确实允许您这样做(大多数情况下)通过使用其他技术在线跟踪旧表上的更改,以便将更改应用到新表上,从而最大限度地减少停机时间。您可以使用物化视图和MV日志自己做同样的事情,但是dbms\u重新定义
是一个很好的抽象层,因此您不必考虑所有这些内部问题s