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

Oracle 将常规表转换为系统分区表 ....

askTom 2017-06-02
246

问题描述

嗨,

有没有办法将常规表转换为系统分区表?

由于系统分区有限制,我们不能使用cta,我们如何将常规表复制到系统分区表?

问候,
Manu

专家解答

如果要将整个表放入系统分区中的1个,则可以进行直接交换

SQL> create table t ( x int, y int );

Table created.

SQL>
SQL> insert into t select rownum, rownum from dual
  2  connect by level <= 1500;

1500 rows created.

SQL>
SQL> create table t1 ( x int, y int )
  2  partition by system
  3  (
  4    partition p1,
  5    partition p2
  6  )
  7  /

Table created.

SQL>
SQL> alter table t1 exchange partition p1 with table t;

Table altered.

复制


如果您有一个定义系统分区的规则,并且该规则可以由数据表示,那么您可以在两个步骤中完成。假设你的系统分区规则是:

“如果x y <500,则分区p1,否则为p2”

你可以这样做:

SQL> create table t ( x int, y int );

Table created.

SQL>
SQL>
SQL> insert into t select rownum, rownum from dual
  2  connect by level <= 1500;

1500 rows created.

SQL>
SQL> alter table t add partcol varchar2(2) invisible generated always as ( case when x+y < 500 then 'p1' else 'p2' end ) ;

Table altered.

SQL>
SQL> alter table T modify
  2  partition by list (partcol)
  3   (
  4     partition p1 values ('p1'),
  5     partition p2 values ('p2')
  6  ) online
  7  /

Table altered.

SQL>
SQL> create table t1 ( x int, y int )
  2  partition by system
  3  (
  4    partition p1,
  5    partition p2
  6  )
  7  /

Table created.

SQL>
SQL> create table t2 ( x int , y int, partcol varchar2(2) invisible generated always as ( case when x+y < 500 then 'p1' else 'p2' end ) );

Table created.

SQL>
SQL> alter table t exchange partition p1 with table t2;

Table altered.

SQL> alter table t1 exchange partition p1 with table t2;

Table altered.

SQL>
SQL> alter table t exchange partition p2 with table t2;

Table altered.

SQL> alter table t1 exchange partition p2 with table t2;

Table altered.

复制


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

评论