Oracle11g 在线分区
我有一个包含大量数据的表,它正在客户端进行生产。我必须对它进行在线分区,这意味着我可以停止生产,并且应该对表进行分区。我有做这件事的剧本。但是我不知道怎么在网上做。是他们的任何方式,我可以做到这一点。请建议..遵循以下步骤Oracle11g 在线分区,oracle11g,partitioning,Oracle11g,Partitioning,我有一个包含大量数据的表,它正在客户端进行生产。我必须对它进行在线分区,这意味着我可以停止生产,并且应该对表进行分区。我有做这件事的剧本。但是我不知道怎么在网上做。是他们的任何方式,我可以做到这一点。请建议..遵循以下步骤 在与主表相同的结构中创建临时表(例如table_p for table),并在所需列上对该临时表进行分区。不要将主表的主键和其他索引添加到此临时表 create table TABLE_P ( COL1 VARCHAR2(35 CHAR) n
create table TABLE_P
(
COL1 VARCHAR2(35 CHAR) not null,
COL2 VARCHAR2(35 CHAR) not null,
)
--add partition (Example taken here is Range partitioning) from here
PARTITION BY RANGE (COL1) (
PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (15),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
--add partition till here
create index IX01_TABLE on TABLE_P (COL1) local;
begin
dbms_redefinition.can_redef_table( 'SCHEMA', 'TABLE' );
end;
/
begin
dbms_redefinition.start_redef_table('SCHEMA', 'TABLE','TABLE_P' );
end;
/
declare
error_count pls_integer := 0;
BEGIN
dbms_redefinition.copy_table_dependents(uname => 'SCHEMA',
orig_table => 'TABLE',
int_table => 'TABLE_P',
num_errors => error_count);
dbms_output.put_line('errors := ' || to_char(error_count));
END;
/
begin
dbms_redefinition.finish_redef_table('SCHEMA', 'TABLE','TABLE_P');
end;
/
请注意,这将使从属对象在架构中变得无效,因此请准备一些停机时间来清除这些无效对象。谢谢您的回答。我必须进行区间划分,请进行相应修改。这将是很大的帮助。非常感谢。您要我添加的索引(IX01_表)是否与原始表索引相同?否。您不需要将任何索引从原始表添加到临时表。在重新定义期间,它们都会自动添加。