oracle11g安装教程_在Oracle中向现有表添加分区

本文详细介绍了如何在Oracle 11g中向现有表添加分区,包括离线和在线操作,以及如何在Oracle 12c中实现此功能。讨论了范围分区的概念,强调了分区对于日期列性能提升的重要性,并提供了从非分区表转换为分区表的步骤,包括删除表、创建带分区的新表、导入数据、创建索引等。
摘要由CSDN通过智能技术生成
oracle11g安装教程

oracle11g安装教程

了解如何在Oracle中向现有表添加分区。 Oracle 12c中对分区的新更改。 使用ALTER TABLE…MODIFY命令以3种方式对分区表进行分区。 1)基本离线操作2)在线操作3)修改索引分区的在线操作

如何更改现有表以在Oracle中创建范围分区

当您想查看性能改进,尤其是在DATE列上时,在表上创建分区非常重要。 在本文中,我们将学习如何使用分区更改现有表。

如何在Oracle中创建用户和授权

什么是Oracle中的分区:

Oracle分区允许将表和索引划分为更小,更易于管理的单元,从而使数据库管理员能够追求“分而治之”的数据管理方法。 …该表可以进行范围分区,以便每个分区包含一天的数据。

使用范围分区创建分区:

 CREATE TABLE table_name

   (column_name DATE)

 PARTITION BY RANGE (column_name)
 (PARTITION partition_name VALUES LESS THAN (value));

例:

 CREATE TABLE STUDENT

  (

    STUDENT_ID  NUMBER( 22 , 0 ) NOT NULL,

    STUDENT_NAME VARCHAR2( 64 ) NOT NULL,

    STUDENT_JOINING_DATE DATE NOT NULL

  )

  PARTITION BY RANGE

  (

    STUDENT_JOINING_DATE

  )

  (

    PARTITION JOINING_20190701 VALUES LESS THAN (TO_DATE( '2019-07-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20200101 VALUES LESS THAN (TO_DATE( '2020-01-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20200701 VALUES LESS THAN (TO_DATE( '2020-07-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20210101 VALUES LESS THAN (TO_DATE( '2021-01-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20210701 VALUES LESS THAN (TO_DATE( '2021-07-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20220101 VALUES LESS THAN (TO_DATE( '2022-01-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20220701 VALUES LESS THAN (TO_DATE( '2022-07-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20230101 VALUES LESS THAN (TO_DATE( '2023-01-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20230701 VALUES LESS THAN (TO_DATE( '2023-07-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20240101 VALUES LESS THAN (TO_DATE( '2024-01-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20240701 VALUES LESS THAN (TO_DATE( '2024-07-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_20250101 VALUES LESS THAN (TO_DATE( '2025-01-01' , 'YYYY-MM-DD' )),

    PARTITION JOINING_MAX VALUES LESS THAN (MAXVALUE)

  );

现在,此新表已部署到生产环境中,并已投入生产1年。 该表现在有1000万条记录。 现在稍后,我们需要在STUDENT_JOINING_DATE列上添加一个分区。 现在我们将看到如何处理这种情况。

是否可以在现有表上添加分区:

好吧,无论哪种方式,您都必须重新创建表-完全没有办法。 考虑一下-您已有一个充满数据的表。 2月旁边是1月的行,3月旁边是行。 整个表需要重写。

在Oracle数据库中这是不可能的。

我们应该做以下事情。

1)导出表2)创建一个新的具有分区定义的空表3)使用IGNORE = Y导入表

您必须注意以下事项。

在这里您需要重新创建

1)索引2)补助金3)添加约束4)添加触发器5)添加您需要做的一切

oracle 12c版本允许将分区添加到现有表中。

Oracle Database 12c第2版(12.2)中的分区增强功能

在Oracle中将非分区表转换为分区表:

我们将执行以下步骤在oracle中的现有表上创建分区。

1)删除表(如果存在)2)创建表3)在分区列上创建索引4)将10000条记录插入到我们在步骤2中创建的现有表中

创建并填充测试表。 您将需要在每个测试之间重复此步骤。

删除表(如果存在):

DROP TABLE Emp ;

创建表:

 CREATE TABLE Emp (

  id          NUMBER,

  name VARCHAR2( 50 ),

  join_date DATE,

  CONSTRAINT emp_pk PRIMARY KEY (id)
 );

创建索引:

CREATE INDEX emp_join_date_idx ON t1(join_date);

插入数据:

在这里,此脚本将10000条记录插入到Emp表中。

 INSERT INTO Emp
 SELECT level,

       'Name for ' || level, || level,

       ADD_MONTHS(TO_DATE( '01-JAN-2019' , 'DD-MON-YYYY' ), -TRUNC(DBMS_RANDOM.value( 1 , 4 )- 1 )* 12 )
 FROM  dual
 CONNECT BY level <= 10000 ;
 COMMIT;

查看基于年份的数据:

我们可以看到数据分布在三年中。

 SELECT join_date, COUNT(*)
 FROM  Emp
 GROUP BY join_date
 ORDER BY 1 ;
 Output:
 join_date  COUNT(*)
 --------- ----------
 01 -JAN- 15 01 -JAN- 15 3340
 01 -JAN- 16 01 -JAN- 16 3290
 01 17 01 17 01 -JAN- 17 3370

对现有表进行分区:

我们可以使用ALTER TABLE…MODIFY命令将表转换为分区表。 这是此操作的一些基本示例。 添加ONLINE关键字可以使操作在线完成。

逐步安装Oracle 18C

这可以通过3种方式完成。

1)基本离线操作2)在线操作3)在线操作,修改索引分区

1)基本离线操作:

 ALTER TABLE Emp MODIFY

  PARTITION BY RANGE (join_date) (

    PARTITION Emp_part_2015 VALUES LESS THAN (TO_DATE( '01-JAN-2016' , 'DD-MON-YYYY' )),

    PARTITION Emp_part_2016 VALUES LESS THAN (TO_DATE( '01-JAN-2017' , 'DD-MON-YYYY' )),

    PARTITION Emp_part_2017 VALUES LESS THAN (TO_DATE( '01-JAN-2018' , 'DD-MON-YYYY' ))

  );

2)在线操作

 ALTER TABLE Emp MODIFY

  PARTITION BY RANGE (join_date) (

    PARTITION Emp_part_2015 VALUES LESS THAN (TO_DATE( '01-JAN-2016' , 'DD-MON-YYYY' )),

    PARTITION Emp_part_2016 VALUES LESS THAN (TO_DATE( '01-JAN-2017' , 'DD-MON-YYYY' )),

    PARTITION Emp_part_2017 VALUES LESS THAN (TO_DATE( '01-JAN-2018' , 'DD-MON-YYYY' ))

  ) ONLINE;

3)在线操作,修改索引分区

 ALTER TABLE Emp MODIFY

  PARTITION BY RANGE (join_date) (

    PARTITION Emp_part_2015 VALUES LESS THAN (TO_DATE( '01-JAN-2016' , 'DD-MON-YYYY' )),

    PARTITION Emp_part_2016 VALUES LESS THAN (TO_DATE( '01-JAN-2017' , 'DD-MON-YYYY' )),

    PARTITION Emp_part_2017 VALUES LESS THAN (TO_DATE( '01-JAN-2018' , 'DD-MON-YYYY' ))

  ) ONLINE

  UPDATE INDEXES

  (

    Emp_pk GLOBAL ,

    Emp_join_date_idx LOCAL

  );

参考

基于Oracle

翻译自: https://www.javacodegeeks.com/2020/08/adding-partition-to-existing-table-in-oracle.html

oracle11g安装教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值