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

Oracle 将分区表和索引移动到多个表空间

askTom 2018-08-02
431

问题描述

我有一个100亿行表,分区32种方式。每个分区都位于单独的表空间中。12个本地分区索引中的每个索引也占据了自己的表空间 (是的,总共44个表空间)。

我们正在将所有应用程序表移至TDE。因此,将有44个新的加密表空间,我们将仅将这一个表及其索引移入其中。

我无法加密现有的表空间,因为这是一个12.2的功能,我们仍然在12.1

我知道我可以使用alter table...移动小表-在任何一个时间点大约有30-50k。我可以使用sql为那些和他们的索引生成移动SQL。

我知道我可以将DBMS_REDEFINITION用于占用单个表空间的分区表,并且在移动过程中它们可以保持联机状态。

有没有办法使用DBMS_REDEFINITION移动我巨大的32分区表?我会使用包来做到这一点,一次只移动一个分区吗?考虑到每个索引都需要移动到不同的表空间,索引会发生什么变化。

假设有一种使用DBMS_REDEFINITION的方法可以做到这一点,那么在加密表空间中部分存在一个表,而在未加密表空间中部分存在一个表,对性能的影响是什么?(Oracle关心吗?)

专家解答

不需要使用dbms_redefinition。您可以在12.1中在线移动分区!

create tablespace new_tblsp datafile 'new_tblsp.dbf' size 10m;

create table t (
  c1 int, 
  c2 int
) partition by hash ( c1 ) (
  partition p1, partition p2
);

insert into t 
  select level, level from dual
  connect by level <= 100;
  
commit;

create index li on t ( c2 ) local;

select partition_name, tablespace_name
from   user_tab_partitions
where  table_name = 'T';

PARTITION_NAME   TABLESPACE_NAME   
P1               USERS             
P2               USERS    

alter table t move partition p1 tablespace new_tblsp update indexes online;

select partition_name, tablespace_name
from   user_tab_partitions
where  table_name = 'T';

PARTITION_NAME   TABLESPACE_NAME   
P1               NEW_TBLSP         
P2               USERS   
复制


这是普通的表,你不能在线移动,直到12.2...

drop table t cascade constraints purge;
create table t (
  c1 int, 
  c2 int
);

insert into t 
  select level, level from dual
  connect by level <= 100;
  
commit;

alter table t move online;

ORA-01735: invalid ALTER TABLE option
复制

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

评论