问题描述
嗨,
有没有办法将常规表转换为系统分区表?
由于系统分区有限制,我们不能使用cta,我们如何将常规表复制到系统分区表?
问候,
Manu
有没有办法将常规表转换为系统分区表?
由于系统分区有限制,我们不能使用cta,我们如何将常规表复制到系统分区表?
问候,
Manu
专家解答
如果要将整个表放入系统分区中的1个,则可以进行直接交换
如果您有一个定义系统分区的规则,并且该规则可以由数据表示,那么您可以在两个步骤中完成。假设你的系统分区规则是:
“如果x y <500,则分区p1,否则为p2”
你可以这样做:
这将是最小的停机时间。
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




