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
- 浏览: 129710 次
- 性别:
- 来自: 杭州
文章分类
最新评论
发表评论
-
Oracle Connect By Prior
2022-01-12 14:49 259/** * connect by主要用于父子,祖孙,上下 ... -
手把手教你用 SQL 实现电商产品用户分析(ORACLE)
2021-11-18 15:21 394--1.创建用户行为表 CREATE TABLE EVEN ... -
Oracle安装与卸载过程
2019-04-02 14:31 353卸载Oracle 1.我的电脑属性,清除环境变量。 2 ... -
ORACLE LISTAGG函数
2017-12-25 18:59 505create table test(id number,na ... -
Oracle 正则表达式
2014-11-19 16:21 641oracle的正则表达式 oracle的正则表达式(reg ... -
Oracle 表连接之Hints
2014-07-21 16:25 883hash_join可以通过swap_join_inputs ... -
Oracle sqlldr使用
2014-01-09 18:53 2316Oracle SQLLDR用法 SQL*LOAD ... -
Oracle 数据泵的使用
2014-01-07 18:24 936--数据泵导出 在本例中,我们将用 Data Pum ... -
Oracle 空值计算总结(踩过不少坑)
2013-09-26 22:03 1787CREATE TABLE T1 (ID INT ,ID1 ... -
Oracle PL/SQL 学习
2013-09-03 15:10 781/* PL/SQL集合 1. RECORD 由单 ... -
ORACEL IOT(转载)
2013-08-06 18:19 975转载(http://blog.sina.com.c ... -
Oracle 行转列,列转行
2013-08-01 18:54 1062Oracle Pivot/Unpivot 此特性只适 ... -
Oracle全局索引和局部索引
2013-06-12 09:27 938表可以按range,hash,list分区,表分区后,其上 ... -
Oracle 分批提交DML
2013-05-12 09:12 2764/* 参考于TOM编程艺术 8.5章在循环中提交 1 ... -
Oracle ROWNUM分页总结
2013-05-11 09:13 930首先ROWNUM只适用于小于或小于等于,如果进行等于判断,那 ... -
Oracle JOB实现多线程插入
2013-05-11 08:39 3516--参考之TOM 编程艺术中的DIY并行 --经测试, ... -
OCP SQL 例子-2
2013-04-23 22:24 924--external table --查询时从外部文件中 ... -
OCP 047 SQL例子1
2013-04-20 15:55 880--047 SQL汇总 /* MINUSE,UNION ... -
Oracle 分析函数详解
2013-04-16 11:53 1538------------------------------ ... -
Oracle 标量子查询
2013-04-15 11:36 1540ORACLE允许在select子句中包含单行子查询, 使用 ...
相关推荐
- **现有表转换限制**:无法直接将已有的表转换为分区表,但可通过 Oracle 提供的在线重定义表功能实现转换。 #### 三、Oracle 分区方法 ##### 1. 范围分区(Range Partitioning) 范围分区基于某一列的值范围来...
- 无法直接将已存在的表转换为分区表,需使用在线重定义表功能。 - 分区管理可能增加数据库复杂性。 4. **表分区的几种类型及操作方法** - **范围分区(Range Partitioning)**:根据分区键的范围划分数据。...
- 已经存在的表不能直接转化为分区表,但Oracle提供了在线重定义功能。 #### 四、表分区的类型及操作方法 1. **范围分区**:最常用的分区类型之一,根据分区键的范围将数据映射到各个分区。通常使用日期作为分区键...
然而,分区也有其缺点,如已存在的非分区表无法直接转换为分区表,需要使用Oracle提供的在线重定义功能。此外,分区会增加数据库的复杂性,可能需要更多的存储空间,并可能对某些类型的DML操作(如INSERT、UPDATE、...
DBMS_REDEFINITION方法是Oracle提供的一个工具包,用于在不锁定原表的情况下,将非分区表在线转换为分区表。通过DBMS_REDEFINITION包中的步骤和函数,可以实现分区表的在线重定义,这种方式对系统影响最小,但需要...
实战例子中的脚本可能会包含如何插入数据、查询特定分区、动态添加新分区、重分区以及维护分区表的其他操作。例如,当年度更迭时,可能需要执行一个脚本来自动添加新的年度分区,以保持数据的有序性。 使用分区脚本...
- 已有的表不能直接转换为分区表,但Oracle提供了在线重定义表的功能。 - 分区表的设计和维护可能比非分区表更加复杂。 #### 4. 表分区的几种类型及操作方法 - **范围分区**:范围分区是最常见的分区类型之一,...
-- @PARAM 即已经分好区的分区表是不能够使用交换分区的方法转换为另一种分区表的; -- @PARAM VARCHAR2 DROPPABLE-------取值范围为(TRUE,FALSE),指定分区完后是否DROP掉分区备份表; 其中参数FIELDFORMAT的取值范围...
1. 现有表转换:已有的非分区表不能直接转为分区表,需要使用Oracle提供的在线重定义功能。 三、Oracle分区方法 1. 范围分区:基于特定列的数值范围进行分区,如按序号或日期创建分区。 2. Hash分区:通过哈希函数...
1. **非直接转换**:已存在的表不能直接转换为分区表,需要通过在线重定义表的操作完成。 **三、Oracle 分区方法** 1. **范围分区**:根据数据值的范围进行分区,如日期或序列号。 2. **Hash 分区**:通过散列...
- 已经存在的表不能直接转换为分区表,但Oracle提供在线重定义表的功能,可以在一定程度上解决这一问题。 #### 四、表分区的几种类型及操作方法 - **范围分区**:根据特定的范围将数据分配到各个分区。最常见的...
1. **转换限制**:现有的表无法直接转换为分区表,但Oracle提供了在线重定义表的功能来解决这一问题。 2. **管理复杂度增加**:虽然分区简化了一些管理任务,但也引入了额外的管理复杂度,特别是在分区策略设计上。 ...
- 非分区表转换困难:已有的大表难以直接转为分区表,但Oracle提供在线重定义表的功能。 5. **表分区的类型及操作** - **范围分区**:数据按特定范围分配到各个分区,如日期、数字范围。例如,销售数据按月份...
然而,分区表也有其局限性,例如已有的非分区表无法直接转换为分区表,需要使用Oracle的在线重定义功能。此外,创建和维护分区表会增加数据库的复杂性,需要更多的存储空间。 Oracle数据库支持多种类型的分区方式,...
例如,已有的非分区表无法直接转换为分区表,需要采用在线重定义等技术。此外,分区会增加数据库设计和管理的复杂性。 三、Oracle 分区的种类 1. 范围分区:根据某个字段的值范围进行分区,如日期、序列号等,适合...
然而,分区也有其不足之处,如已有的表无法直接转换为分区表,需要通过特定的Oracle工具进行在线重定义。此外,分区管理也会带来额外的存储开销和设计复杂性。 Oracle支持多种分区类型,例如: 1. 范围分区:数据...
- 已有的表不能直接转换为分区表,需要使用Oracle的在线重定义功能。 #### 四、表分区的类型及操作方法 Oracle支持多种分区类型,包括范围分区、列表分区、散列分区和复合分区。 1. **范围分区**:根据一个范围值...
然而,表分区也有其缺点,例如,已存在的非分区表无法直接转换为分区表,需要通过特定的方法如在线重定义来实现。此外,分区会增加数据库的复杂性,可能需要更多的存储空间,且对于不涉及分区键的查询,可能无法提升...