Oracle 12C 新特性之非分区表转分区表online clause(不停业务+索引有效)
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(不停业务+索引有效)的更多相关文章
- Oracle 12c新特性
转载自:Oracle 12c新特性(For DBA) 一: Multitenant Architecture (12.1.0.1) 多租户架构是Oracle 12c(12.1)的新增重磅特性 ...
- Oracle 12C 新特性之扩展数据类型(extended data type)
Oracle 12C 新特性-扩展数据类型,在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节.只要可能,扩展字 ...
- Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)
实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...
- Oracle 12c新特性(For DBA)
一: Multitenant Architecture (12.1.0.1) 多租户架构是Oracle 12c(12.1)的新增重磅特性,内建的多分租(Multi-tenancy),一个容器 ...
- ORACLE 12C新特性——CDB与PDB
Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库( ...
- Oracle 12C 新特性之表分区或子分区的在线迁移
Oracle 12c 中迁移表分区或子分区到不同的表空间不再需要复杂的过程.与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间.当指定了 ONLINE 语句,所 ...
- Oracle 12C 新特性之 PDB热克隆(本地克隆、远端异机克隆)
说明:版本12.2.0.1 12c r1版本中 clone 一份PDB源库需要打开在read only只读模式 , 在12c r2版本中引入了local undo mode, 源PDB在read/wr ...
- Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED
Oracle12c开始,我们在获取SQL语句的执行计划时,也会经常看到"TABLE ACCESS BY INDEX ROWID BATCHED"操作,那么,这个操作到底是什么意思呢 ...
- Oracle 12C 新特性之 db默认字符集AL32UTF8、PDB支持不同字符集
一. db默认字符集AL32UTF8Specify the database character set when you create the database. Starting from Ora ...
随机推荐
- juddi学习一
一.下载juddi 地址:https://mirrors.tuna.tsinghua.edu.cn/apache/juddi/juddi/3.3.4/ 二. 解压下载文件打开目录下的 进入bin目录, ...
- jemeter正则表达式
- 【转】air调用windows自带的虚拟键盘
原文:http://bbs.9ria.com/blog-73243-19560.html 最近在做一个东西,需要用到虚拟键盘.刚开始准备用as3开发一套,结果突然想起来windows有个自带的虚拟键盘 ...
- redux计算器
//简单运用redux写了一个加减乘除功能 <!DOCTYPE html><html lang="en"><head> <meta cha ...
- zoom动画,实现图片点击预览效果
参考:https://developer.android.google.cn/training/animation/zoom.html 1.创建Views 下面的布局包括了你想要zoom的大版本和小版 ...
- Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...
- vue项目目录介绍
Vue项目目录 初始化项目 vue init webpack []projectname] cd [projectname] npm install vue run dev 目录树 +---build ...
- java多线程基本概述(一)——线程的基本认知
1.1.概念: 进程:进程是操作系统结构的基础,是一次程序的执行:是一个程序及其数据再处理器上顺序执行时所发生的活动:是程序再一个数据集合上运行的过程,它是系统进行系统资源分配和调度的最小单元. 线程 ...
- Go 并发随机打印1-n
package main import ( "fmt" "math/rand" "sync" "t ...
- Select()和SelectMany()的区别
Select与SelectMany的区别 Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值. Select() 为每个源值生成一个结果值.因此,总体结果是一个与源 ...