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. juddi学习一

    一.下载juddi 地址:https://mirrors.tuna.tsinghua.edu.cn/apache/juddi/juddi/3.3.4/ 二. 解压下载文件打开目录下的 进入bin目录, ...

  2. jemeter正则表达式

  3. 【转】air调用windows自带的虚拟键盘

    原文:http://bbs.9ria.com/blog-73243-19560.html 最近在做一个东西,需要用到虚拟键盘.刚开始准备用as3开发一套,结果突然想起来windows有个自带的虚拟键盘 ...

  4. redux计算器

    //简单运用redux写了一个加减乘除功能 <!DOCTYPE html><html lang="en"><head> <meta cha ...

  5. zoom动画,实现图片点击预览效果

    参考:https://developer.android.google.cn/training/animation/zoom.html 1.创建Views 下面的布局包括了你想要zoom的大版本和小版 ...

  6. Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...

  7. vue项目目录介绍

    Vue项目目录 初始化项目 vue init webpack []projectname] cd [projectname] npm install vue run dev 目录树 +---build ...

  8. java多线程基本概述(一)——线程的基本认知

    1.1.概念: 进程:进程是操作系统结构的基础,是一次程序的执行:是一个程序及其数据再处理器上顺序执行时所发生的活动:是程序再一个数据集合上运行的过程,它是系统进行系统资源分配和调度的最小单元. 线程 ...

  9. Go 并发随机打印1-n

    package main import (     "fmt"     "math/rand"     "sync"     "t ...

  10. Select()和SelectMany()的区别

    Select与SelectMany的区别 Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源 ...