12c以前非分区表需要转换为分区, 如果不停业务的话可以使用在线重定义,只有在表进行切换的时候会有短暂的锁表。 12c 中alter table online clause 实现了表上现有的索引有效,又不停业务。

测试一:非分区表转分区表,索引转换为oracle内部规则。
-- 建非分区表
create table andy_clause as select  * from user_objects where  object_id is not null;
--创建非分区表索引
create index idx_oid on andy_clause( object_id );
create index idx_ctime_oname on andy_clause( created, object_name );
create bitmap index idx_b_otype on andy_clause(object_type);
--查看表索引
SQL> 
col column_name for a40
SELECT index_name, column_name, descend,COLUMN_POSITION  FROM user_ind_columns  WHERE table_name = 'ANDY_CLAUSE';
INDEX_NAME                COLUMN_NAME                              DESC COLUMN_POSITION
------------------------- ---------------------------------------- ---- ---------------
IDX_OID                   OBJECT_ID                                ASC                1
IDX_CTIME_ONAME           CREATED                                  ASC                1
IDX_CTIME_ONAME           OBJECT_NAME                              ASC                2
IDX_B_OTYPE               OBJECT_TYPE                              ASC                1
-- 查看索引状态
SQL> 
col index_name for a25
select table_name,index_name,status,blevel,leaf_blocks from user_Indexes where table_name ='ANDY_CLAUSE';
TABLE_NAME                INDEX_NAME                STATUS       BLEVEL LEAF_BLOCKS
------------------------- ------------------------- -------- ---------- -----------
ANDY_CLAUSE               IDX_OID                   VALID             0           1
ANDY_CLAUSE               IDX_CTIME_ONAME           VALID             0           1
ANDY_CLAUSE               IDX_B_OTYPE               VALID             0           1
--转换当前表为分区以 object_id 字段, interval分区表,直接 update index,使用ORACLE有自己的索引转换规则。
SQL>  
alter table andy_clause modify
partition by range (object_id) interval (5)
(
partition p1 values less than (73527)
) online
update indexes;

Table altered.
说明:update index ,没有指定写local 或global选项, ORACLE有自己的索引转换规则
--查看表索引
SQL> 
col column_name for a40
SELECT index_name, column_name, descend,COLUMN_POSITION  FROM user_ind_columns  WHERE table_name = 'ANDY_CLAUSE';
INDEX_NAME                COLUMN_NAME                              DESC COLUMN_POSITION
------------------------- ---------------------------------------- ---- ---------------
IDX_OID                   OBJECT_ID                                ASC                1
IDX_CTIME_ONAME           CREATED                                  ASC                1
IDX_CTIME_ONAME           OBJECT_NAME                              ASC                2
IDX_B_OTYPE               OBJECT_TYPE                              ASC                1
-- 查看索引状态
SQL> 
col TABLE_NAME for a25
col index_name for a25
select table_name,index_name,INDEX_TYPE,status,blevel,leaf_blocks from user_Indexes where table_name ='ANDY_CLAUSE';
TABLE_NAME                INDEX_NAME                STATUS       BLEVEL LEAF_BLOCKS
------------------------- ------------------------- -------- ---------- -----------
ANDY_CLAUSE               IDX_OID                   N/A               0           4
ANDY_CLAUSE               IDX_CTIME_ONAME           VALID             0           1
ANDY_CLAUSE               IDX_B_OTYPE               N/A               0           4
SQL> COL INDEX_OWNER FOR A20;
SQL> select INDEX_OWNER,index_name,status,blevel,leaf_blocks from dba_ind_partitions where INDEX_OWNER='C##ANDY'and Index_name='IDX_OID';
INDEX_OWNER          INDEX_NAME                STATUS       BLEVEL LEAF_BLOCKS
-------------------- ------------------------- -------- ---------- -----------
C##ANDY              IDX_OID                   USABLE            0           1
C##ANDY              IDX_OID                   USABLE            0           1
C##ANDY              IDX_OID                   USABLE            0           1
C##ANDY              IDX_OID                   USABLE            0           1
SQL> 
COL INDEX_OWNER FOR A20;
col index_name for a25
select INDEX_OWNER,index_name,status,blevel,leaf_blocks from dba_ind_partitions where INDEX_OWNER='C##ANDY'and Index_name='IDX_B_OTYPE';
INDEX_OWNER          INDEX_NAME                STATUS       BLEVEL LEAF_BLOCKS
-------------------- ------------------------- -------- ---------- -----------
C##ANDY              IDX_B_OTYPE               USABLE            0           1
C##ANDY              IDX_B_OTYPE               USABLE            0           1
C##ANDY              IDX_B_OTYPE               USABLE            0           1
C##ANDY              IDX_B_OTYPE               USABLE            0           1
说明:user_Indexes 是主要计量一个index的相关信息的,如果分区索引为local index 它不能记录状态,就为 N/A ,分区 local index要用视图 dba_ind_partitions 查状态。
-- 查看分区情况
SQL> 
select table_name,partition_name,PARTITION_POSITION,tablespace_name,HIGH_VALUE from user_tab_partitions where table_name='ANDY_CLAUSE';
TABLE_NAME                PARTITION_NAME            PARTITION_POSITION TABLESPACE_NAME                HIGH_VALUE
------------------------- ------------------------- ------------------ ------------------------------ -----------
ANDY_CLAUSE               P1                                         1 USERS                          73527
ANDY_CLAUSE               SYS_P341                                   2 USERS                          73532
ANDY_CLAUSE               SYS_P343                                   3 USERS                          73592
ANDY_CLAUSE               SYS_P342                                   4 USERS                          73597

测试二:非分区表转分区表,索引转换为自己设定规则。

-- 建非分区表
SQL> create table andy_clause02 as select  * from user_objects where  object_id is not null;
--创建非分区表索引
SQL>
create index idx_oid on andy_clause02( object_id );
create index idx_ctime_oname on andy_clause02( created, object_name );
create bitmap index idx_b_otype on andy_clause02(object_type);

--转换当前表为分区以 object_id 字段, interval分区表,update indexes 时,自己指定local 或global选项
SQL> 
alter table andy_clause02 modify
partition by range (object_id) interval (5)
(
partition p1 values less than (73527)
) online
update indexes
( idx_oid  local,
idx_ctime_oname global partition by range (created)
(
partition ix2_p1 values less than (date '2017-05-01'),
partition ix2_p2 values less than (maxvalue)
)
);
Table altered.
--查看表索引
SQL> 
col index_name for a25
col COLUMN_NAME for a25
SELECT index_name, column_name, descend,COLUMN_POSITION  FROM user_ind_columns  WHERE table_name = 'ANDY_CLAUSE02';
INDEX_NAME                COLUMN_NAME               DESC COLUMN_POSITION
------------------------- ------------------------- ---- ---------------
IDX_OID                   OBJECT_ID                 ASC                1
IDX_CTIME_ONAME           CREATED                   ASC                1
IDX_CTIME_ONAME           OBJECT_NAME               ASC                2
IDX_B_OTYPE               OBJECT_TYPE               ASC                1

-- 查看索引状态
SQL> 
col index_name for a25
col TABLE_NAME for a25
select table_name,index_name,status,blevel,leaf_blocks from user_Indexes where table_name ='ANDY_CLAUSE02';
TABLE_NAME                INDEX_NAME                STATUS       BLEVEL LEAF_BLOCKS
------------------------- ------------------------- -------- ---------- -----------
ANDY_CLAUSE02             IDX_OID                   N/A               1         113
ANDY_CLAUSE02             IDX_CTIME_ONAME           N/A               2         432
ANDY_CLAUSE02             IDX_B_OTYPE               N/A               1           3

Oracle 12C 新特性之非分区表转分区表online clause(不停业务+索引有效)的更多相关文章

  1. Oracle 12c新特性

    转载自:Oracle 12c新特性(For DBA) 一: Multitenant Architecture (12.1.0.1)      多租户架构是Oracle 12c(12.1)的新增重磅特性 ...

  2. Oracle 12C 新特性之扩展数据类型(extended data type)

    Oracle 12C 新特性-扩展数据类型,在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节.只要可能,扩展字 ...

  3. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)

    实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...

  4. Oracle 12c新特性(For DBA)

    一: Multitenant Architecture (12.1.0.1)      多租户架构是Oracle 12c(12.1)的新增重磅特性,内建的多分租(Multi-tenancy),一个容器 ...

  5. ORACLE 12C新特性——CDB与PDB

    Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库( ...

  6. Oracle 12C 新特性之表分区或子分区的在线迁移

    Oracle 12c 中迁移表分区或子分区到不同的表空间不再需要复杂的过程.与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间.当指定了 ONLINE 语句,所 ...

  7. Oracle 12C 新特性之 PDB热克隆(本地克隆、远端异机克隆)

    说明:版本12.2.0.1 12c r1版本中 clone 一份PDB源库需要打开在read only只读模式 , 在12c r2版本中引入了local undo mode, 源PDB在read/wr ...

  8. Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED

    Oracle12c开始,我们在获取SQL语句的执行计划时,也会经常看到"TABLE ACCESS BY INDEX ROWID BATCHED"操作,那么,这个操作到底是什么意思呢 ...

  9. Oracle 12C 新特性之 db默认字符集AL32UTF8、PDB支持不同字符集

    一. db默认字符集AL32UTF8Specify the database character set when you create the database. Starting from Ora ...

随机推荐

  1. Android 中基于 Binder的进程间通信

    摘要:对  Binder 工作机制进行了分析. 首先简述 Android 中 Binder 机制与传统的 Linux 进程间的通信比较,接着对基于 Binder 进程间通信的过程分析 最后结合开发实例 ...

  2. Java Swing客户端小项目

    记录一下两个用java swing写的客户端. 项目1: 关键词:swing  jtable 代码如下: 1.主类: package com.my.agent.client; import java. ...

  3. centos6.5 源码安装 gtk 环境

    解决 No package 'gtk+-2.0′ found问题方法:yum install libgnomeui-devel 执行了上面的,下面的就可以放弃了,yum 大法好 首先 yum 安装下面 ...

  4. 关于JavaScript中连等赋值那点事

    今天看了前端网上关于JS的题目,其中有一道题目挺有意思的.如下 var a = b =10; (function(){ var a = b = 20; })(); console.log(a); co ...

  5. 山谈c中printf格式修饰符

    废话不多说,简单粗暴地上图. (一)初始定义 (二)运行结果 (三)规律总结 对于如下: printf("%7.4d",12); printf("%4.7f", ...

  6. Python__slots__详解

    摘要 当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): __slots__ = ['foo'].这样做带来以下优点: 更快的属性 ...

  7. Python 安装虚拟环境

    写在前面: 安装指南是在 Ubuntu 下面操作的.不同的 Linux 版本,安装指令不同.所以,该指南的某些指令对于像 CentOS 等非 Ubuntu 系统不适用. 为什么需要使用虚拟环境? 虚拟 ...

  8. Load 数据1

    Druid 的load 数据分为两类 :批量load(历史数据) 和实时load(新数据) ,本文介绍批量load 数据 indexing 服务 批量load 数据需要用到indexing 服务,它是 ...

  9. java多线程基本概述(二)——Thread的一些方法

    在Thread类中有很多方法值得我们关注一下.下面选取几个进行范例: 1.1.isAlive()方法 java api 描述如下: public final boolean isAlive() Tes ...

  10. Eclipse 安装反编译插件

    前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面 ...