如何在Oracle 11g中进行系统分区?
我对数据库非常陌生。我想为oracle中的现有大型数据库表执行系统分区。有人可以建议 如何在Oracle数据库中实现对现有表的系统分区?如何在Oracle 11g中进行系统分区?
请注意我只是在寻找系统分区不寻找范围或散列或复合分区。
据我所知,现有的表不能分区。你将不得不重新创建它。 对于这种情况,有一个称为dbms_redefinition
的Oracle包(详情请参阅https://docs.oracle.com/database/121/ARPLS/d_redefi.htm),但我将提供一个非常简单的示例,而不使用此包。
假设你有以下的非分区表:
create table T_TABLE
(
pkey NUMBER not null,
t_data VARCHAR2(250) not null,
partitionkey NUMBER not null
);
如果你想分区表,第一步就是重命名表:
alter table t_table rename to old_table;
然后,创建新表
create table T_TABLE
(
pkey NUMBER not null,
t_data VARCHAR2(250) not null,
partitionkey NUMBER not null
)
partition by system
(
partition p1 tablespace users,
partition p2 tablespace users,
partition p3 tablespace users
);
现在您可以将旧表中的表格行插入新表。你的application/sql需要告诉服务器在哪个分区中插入。 例如,像这样:
insert into t_table partition (p1) select * from old_table where partitionkey = 1;
insert into t_table partition (p2) select * from old_table where partitionkey = 2;
insert into t_table partition (p3) select * from old_table where partitionkey = 3;
commit;
现在你可以删除旧表。
drop table old_table;
Fyi,Oracle [在12.2中引入了分区非分区表](https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbf/oracle-database-12-2-new -features.html#GUID-D5D9C311-3597-4494-B8DE-CE33EE4FA546) – Boneist
酷 - 感谢提示。尽管可能需要几年时间才能使用该新功能。 –
是的,我在同一条船上(我愿意为12.2扩展的to_char/to_number/etc函数获得我的双手!),但我认为这是值得分享的信息* {:-)我相信博客,我读了它,除了我不记得现在谁发布了它! – Boneist
什么是“系统分区”? –
这是应用程序逻辑控制分区结构的Oracle数据库分区方法。 –
请参阅[this](https://docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#BABFCBHC)和[this](https://docs.oracle.com/cd/E11882_01 /server.112/e41084/statements_7002.htm#BABJBDCC)...但不确定这真的有助于解释OP在这里要做什么。 –