`

Oracle 表在线重定义为分区表(示例)

 
阅读更多

SQL> CREATE TABLE TT AS SELECT * FROM DBA_OBJECTS WHERE OBJECT_TYPE IN ('TABLE','INDEX','FUNCTION');--创建原表

表已创建。

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('ADMIN', 'TT', DBMS_REDEFINITION.CONS_USE_PK);--检测是否可以进行重定义
BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE('ADMIN', 'TT', DBMS_REDEFINITION.CONS_USE_PK); END;

*
第 1 行出现错误:
ORA-12089: 不能联机重新定义无主键的表 "ADMIN"."TT"
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 137
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1478
ORA-06512: 在 line 1


SQL> ALTER TABLE TT ADD PRIMARY KEY (OBJECT_ID);--创建主键索引

表已更改。

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('ADMIN', 'TT', DBMS_REDEFINITION.CONS_USE_PK);

PL/SQL 过程已成功完成。

SQL> CREATE TABLE MID_TT--创建中间表
  2  (
  3    OWNER          VARCHAR2(30),
  4    OBJECT_NAME    VARCHAR2(128),
  5    SUBOBJECT_NAME VARCHAR2(30),
  6    OBJECT_ID      NUMBER NOT NULL,
  7    DATA_OBJECT_ID NUMBER,
  8    OBJECT_TYPE    VARCHAR2(19),
  9    CREATED        DATE,
 10    LAST_DDL_TIME  DATE,
 11    TIMESTAMP      VARCHAR2(19),
 12    STATUS         VARCHAR2(7),
 13    TEMPORARY      VARCHAR2(1),
 14    GENERATED      VARCHAR2(1),
 15    SECONDARY      VARCHAR2(1)
 16  )TABLESPACE TEST
 17   PARTITION BY LIST(OBJECT_TYPE) (
 18   PARTITION TAB VALUES('TABLE'),
 19   PARTITION IDX VALUES('INDEX'),
 20   PARTITION FUNC VALUES('FUNCTION')
 21  );

表已创建。

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE('ADMIN', 'TT', 'MID_TT');--初始化 表的重定

PL/SQL 过程已成功完成。

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('ADMIN','TT', 'MID_TT');--完成 表的重定义

PL/SQL 过程已成功完成。

SQL> SELECT SEGMENT_NAME,PARTITION_NAME FROM DBA_SEGMENTS WHERE SEGMENT_NAME IN ('TT','MID_TT') AND OWNER = 'ADMIN';--原表的结构与中间表的结构互换

SEGMENT_NAME                                                                      PARTITION_NAME
--------------------------------------------------------------------------------- ------------------------------
MID_TT
TT                                                                                TAB
TT                                                                                IDX
TT                                                                                FUNC

SQL> SELECT TABLE_NAME,INDEX_NAME FROM DBA_INDEXES  WHERE TABLE_NAME IN ('TT','MID_TT') AND OWNER = 'ADMIN';--原表的主键索引也创建到中间表中

TABLE_NAME                     INDEX_NAME
------------------------------ ------------------------------
MID_TT                         SYS_C007791

分享到:
评论

相关推荐

    Oracle分区表详解

    - **现有表转换限制**:无法直接将已有的表转换为分区表,但可通过 Oracle 提供的在线重定义表功能实现转换。 #### 三、Oracle 分区方法 ##### 1. 范围分区(Range Partitioning) 范围分区基于某一列的值范围来...

    Oracle分区表用法

    - 无法直接将已存在的表转换为分区表,需使用在线重定义表功能。 - 分区管理可能增加数据库复杂性。 4. **表分区的几种类型及操作方法** - **范围分区(Range Partitioning)**:根据分区键的范围划分数据。...

    oracle表分区详细讲解

    - 已经存在的表不能直接转化为分区表,但Oracle提供了在线重定义功能。 #### 四、表分区的类型及操作方法 1. **范围分区**:最常用的分区类型之一,根据分区键的范围将数据映射到各个分区。通常使用日期作为分区键...

    ORACLE分区表的概念及操作

    然而,分区也有其缺点,如已存在的非分区表无法直接转换为分区表,需要使用Oracle提供的在线重定义功能。此外,分区会增加数据库的复杂性,可能需要更多的存储空间,并可能对某些类型的DML操作(如INSERT、UPDATE、...

    BLOG_如何将一个普通表转换为分区表.pdf

    DBMS_REDEFINITION方法是Oracle提供的一个工具包,用于在不锁定原表的情况下,将非分区表在线转换为分区表。通过DBMS_REDEFINITION包中的步骤和函数,可以实现分区表的在线重定义,这种方式对系统影响最小,但需要...

    oracle数据库表按年分区脚本实战例子

    实战例子中的脚本可能会包含如何插入数据、查询特定分区、动态添加新分区、重分区以及维护分区表的其他操作。例如,当年度更迭时,可能需要执行一个脚本来自动添加新的年度分区,以保持数据的有序性。 使用分区脚本...

    ORACLE-分区表的用法

    - 已有的表不能直接转换为分区表,但Oracle提供了在线重定义表的功能。 - 分区表的设计和维护可能比非分区表更加复杂。 #### 4. 表分区的几种类型及操作方法 - **范围分区**:范围分区是最常见的分区类型之一,...

    ORACLE大表分区

    -- @PARAM 即已经分好区的分区表是不能够使用交换分区的方法转换为另一种分区表的; -- @PARAM VARCHAR2 DROPPABLE-------取值范围为(TRUE,FALSE),指定分区完后是否DROP掉分区备份表; 其中参数FIELDFORMAT的取值范围...

    oracle表分区.[归类].pdf

    1. 现有表转换:已有的非分区表不能直接转为分区表,需要使用Oracle提供的在线重定义功能。 三、Oracle分区方法 1. 范围分区:基于特定列的数值范围进行分区,如按序号或日期创建分区。 2. Hash分区:通过哈希函数...

    ORACLE分区与索引

    1. **非直接转换**:已存在的表不能直接转换为分区表,需要通过在线重定义表的操作完成。 **三、Oracle 分区方法** 1. **范围分区**:根据数据值的范围进行分区,如日期或序列号。 2. **Hash 分区**:通过散列...

    oracle表分区精讲

    - 已经存在的表不能直接转换为分区表,但Oracle提供在线重定义表的功能,可以在一定程度上解决这一问题。 #### 四、表分区的几种类型及操作方法 - **范围分区**:根据特定的范围将数据分配到各个分区。最常见的...

    oracle表分区详解

    1. **转换限制**:现有的表无法直接转换为分区表,但Oracle提供了在线重定义表的功能来解决这一问题。 2. **管理复杂度增加**:虽然分区简化了一些管理任务,但也引入了额外的管理复杂度,特别是在分区策略设计上。 ...

    oracle分区表

    - 非分区表转换困难:已有的大表难以直接转为分区表,但Oracle提供在线重定义表的功能。 5. **表分区的类型及操作** - **范围分区**:数据按特定范围分配到各个分区,如日期、数字范围。例如,销售数据按月份...

    (Oracle管理)多做知识的积累 详解ORACLE数据库的分区表.docx

    然而,分区表也有其局限性,例如已有的非分区表无法直接转换为分区表,需要使用Oracle的在线重定义功能。此外,创建和维护分区表会增加数据库的复杂性,需要更多的存储空间。 Oracle数据库支持多种类型的分区方式,...

    oracle表分区

    例如,已有的非分区表无法直接转换为分区表,需要采用在线重定义等技术。此外,分区会增加数据库设计和管理的复杂性。 三、Oracle 分区的种类 1. 范围分区:根据某个字段的值范围进行分区,如日期、序列号等,适合...

    详解oracle的分表之表分区的具体使用和示例

    然而,分区也有其不足之处,如已有的表无法直接转换为分区表,需要通过特定的Oracle工具进行在线重定义。此外,分区管理也会带来额外的存储开销和设计复杂性。 Oracle支持多种分区类型,例如: 1. 范围分区:数据...

    Oracle Partition分区详细总结.pdf

    - 已有的表不能直接转换为分区表,需要使用Oracle的在线重定义功能。 #### 四、表分区的类型及操作方法 Oracle支持多种分区类型,包括范围分区、列表分区、散列分区和复合分区。 1. **范围分区**:根据一个范围值...

    oracle表空间表分区详解及oracle表分区查询使用方法

    然而,表分区也有其缺点,例如,已存在的非分区表无法直接转换为分区表,需要通过特定的方法如在线重定义来实现。此外,分区会增加数据库的复杂性,可能需要更多的存储空间,且对于不涉及分区键的查询,可能无法提升...

Global site tag (gtag.js) - Google Analytics