【问题标题】:How to make System partition in Oracle 11g?如何在 Oracle 11g 中进行系统分区?
【发布时间】:2017-08-01 12:36:22
【问题描述】:

我对数据库非常陌生。我想在 oracle 中为现有的大型数据库表进行系统分区。有人可以建议 oracle数据库中的现有表如何实现系统分区?

请注意,我只是在寻找系统分区,而不是在寻找范围或哈希或复合分区。

【问题讨论】:

  • 什么是“系统分区”?
  • 这是一种 Oracle 数据库的数据分区方法,其中应用程序逻辑控制分区结构。
  • thisthis ...但不确定这是否真的有助于解释 OP 想要在这里做什么。
  • OP 是什么意思?需要一个示例来为我现有的表做系统分区。
  • @AnuragKumar - original poster - 即你。

标签: oracle oracle11g database-administration


【解决方案1】:

据我所知,无法对现有表进行分区。您将不得不重新创建它。 有一个名为 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;

【讨论】:

  • 酷 - 感谢您的提示。尽管我可能需要数年时间才能使用该新功能。
  • 是的,我在同一条船上(我很想获得 12.2 扩展的 to_char/to_number/etc 函数!),但我认为这是值得分享的信息 *{: -) 我会感谢我读到它的博客,但我现在不记得是谁发布了它!
  • @ThomasTschernich 非常感谢您提供此解决方案 :-)
  • @AnuragKumar 如果您喜欢这个答案,请考虑接受它(点击我的答案左侧的绿色按钮)。
猜你喜欢
  • 1970-01-01
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2011-04-08
  • 1970-01-01
相关资源
最近更新 更多