首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle中使用海量数据对现有表进行分区的可行性

问在Oracle中使用海量数据对现有表进行分区的可行性
EN

Database Administration用户
提问于 2017-03-10 05:11:15
回答 3查看 4.6K关注 0票数 2

我们有一组涉及1tb+数据的24个表,这就是为什么DBA建议使用分区来更好地处理使用情况。

唯一的问题是对现有表进行分区,因为从当前表到临时表的数据传输将需要很长时间(Dbms_redefinition),因此他们建议使用2表方法,其中旧表将是静态的,新表将被分区,select将根据需要将两个表合并。

我只是想探索一下,在不需要大量停机时间的情况下,是否有其他方法对现有表进行分区。

EN

回答 3

Database Administration用户

发布于 2017-03-10 05:48:07

Oracle数据库提供了一种机制,可以在不显著影响表可用性的情况下对表结构进行修改。该机制称为联机表重新定义。与传统的重新定义表的方法相比,在线重新定义表提供了大量的可用性。

您可以在线重新定义表,DML可以访问该表。该表将在一段可忽略的时间内以独占模式锁定,而该表的大小并不重要。

缺点是,您必须有与您的表(1TB)大小相等的额外空间。

更新:

非分区表到分区表的联机转换可转换为联机分区表。索引作为此操作的一部分进行维护,并且也可以进行分区。转换对正在进行的DML操作没有影响。

在Oracle12c第2版中,可以使用ALTER TABLE语句将非分区表转换为分区表。但是,根据您的标记,您是在11g R2,您没有这个选项。

文档:

票数 2
EN

Database Administration用户

发布于 2017-03-10 20:59:10

旧表将是静态的,新表将被分区,而select将根据需要将两个表合并在一起。

在不复制任何内容或需要任何额外空间的情况下,在瞬间完成这一操作非常容易,而且您根本不需要使用UNION或重写任何东西,因为您可以使用1个表来完成这一任务。

假设你的桌子是这样的:

代码语言:javascript
复制
create table t1 (col1 date, col2 number);

然后,使用一个分区创建此表的分区版本,在该分区中可以存储所有现有数据:

代码语言:javascript
复制
create table t1_exch (col1 date, col2 number)
partition by range (col1)
interval (numtodsinterval(1, 'day'))
(
  partition p1 values less than (date'2017-03-11')
);

然后将表与分区交换:

代码语言:javascript
复制
alter table t1_exch exchange partition p1 with table t1;

最后,删除旧表,重命名新表以使用旧表的名称:

代码语言:javascript
复制
drop table t1 purge;
alter table t1_exch rename to t1;

在'2017-03-11'之后插入的数据将被自动分区,您可以保留原来的数据,如果需要,也可以分割成分区。

分区数据很容易,麻烦的部分可能是处理需要全局的约束和索引。您可能需要更改PK和唯一约束(和索引),因为在没有分区键的情况下,这些索引不能在本地分区。另外,由于删除旧表并有一个新表代替它,您需要整理指向此表的FK约束。

票数 1
EN

Database Administration用户

发布于 2017-03-10 06:10:23

  1. 可以使用默认sysdate向该大型表添加日期列(例如sql_date)。因此,只有新记录才会存储当前日期。
  2. 在sql_date上创建索引。
  3. 一批一批更新sql_date。
  4. 用其他名称创建分区表。
  5. 使用CTAS批处理逐批将数据复制到已分区表。

一旦数据被复制95%。休息一段时间。

  1. 复制剩余的数据
  2. 重命名表(交换名称)
  3. 加上赠款
  4. 经过测试后,删除旧表

唯一的缺点是额外的空间等于表的大小(1TB)。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/166780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档