随着数据的逐渐的增长, 在目前这个数据"爆炸式"增长的趋势下, 也许最初设计的非分区表需要转换为分区, 以前如果不停业务的话可以使用在线重定义, 但是在12c 中alter table增加了online clause, 在上篇记录了维护多分区的增强, 这篇继续记录12c在分区维护上的增强, 有没有遇到过需求把现有的非分区表转换为分区表, 同时需要考虑表上现有的索引, 又不停业务? 在12c 中成为现实.
-- demo --
# 创建非分区表同时创建三个索引(位图\\分区列在前\\不含分区列)
# 转换当前表为分区以created字段, interval分区表
Note:
一条命令把原分区表转换成了分区表,同时列上的索引还保护有效, 上面使用了ONLINE关键字, 当然除了这里在线非分区转换分区外, 分区表也可以online MOVE, 这个特性就不再演示了.
上面的命令中还使用了update indexes 选项, 可以使用local, global选项指定现有的索引创建成对应的local还是global分区; 如果只带了update index ,没有指写local 或global选项就像上面的位图索引, ORACLE有自己的索引转换规则:
有一些限制以下的表不支持:
-- demo --
# 创建非分区表同时创建三个索引(位图\\分区列在前\\不含分区列)
create table anbob_t2 as
select *
from dba_Objects
where object_id is not null;
create index idx_oid on anbob_t2 ( object_id );
create index idx_ctime_oname on anbob_t2 ( created, object_name );
create bitmap index idx_b_otype on anbob_t2 (object_type);
SQL> @ind anbob_t2
Display indexes where table or index name matches %anbob_t2%...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
------------- ------------ ------------------- ---- ------------------------------ ----
ANBOB ANBOB_T2 IDX_B_OTYPE 1 OBJECT_TYPE
IDX_CTIME_ONAME 1 CREATED
2 OBJECT_NAME
IDX_OID 1 OBJECT_ID
INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS
------------- ------------ ------------------- ---------- ---- -------- ---- ---- -- ----------
ANBOB ANBOB_T2 IDX_B_OTYPE BITMAP NO VALID NO N 2 4
ANBOB_T2 IDX_CTIME_ONAME NORMAL NO VALID NO N 3 576
ANBOB_T2 IDX_OID NORMAL NO VALID NO N 2 171复制
# 转换当前表为分区以created字段, interval分区表
SQL> alter table anbob_t2 modify
2 partition by range (object_id) interval (10000)
3 (
4 partition p1 values less than (20000)
5 ) online
6 update indexes
7 ( idx_oid local,
8 idx_ctime_oname global partition by range (created)
9 (
10 partition ix2_p1 values less than (date '2014-08-01'),
11 partition ix2_p2 values less than (maxvalue)
12 )
13 );
Table created.
SQL> @tabpart anbob_t2
TABLE_OWNE TABLE_NAME POS COM PARTITION_NAME NUM_ROWS SUBPARTITION_COUNT HIGH_VALUE_RAW
---------- ------------ ---------- --- -------------------- ---------- ------------------ ------------------
ANBOB ANBOB_T2 1 NO P1 0 20000
ANBOB 2 NO SYS_P1498 0 30000
ANBOB 3 NO SYS_P1499 0 40000
ANBOB 4 NO SYS_P1500 0 50000
ANBOB 5 NO SYS_P1501 0 60000
ANBOB 6 NO SYS_P1502 0 70000
ANBOB 7 NO SYS_P1503 0 80000
7 rows selected.
SQL> @ind anbob_t2
Display indexes where table or index name matches %anbob_t2%...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
------------- ------------- -------------------- ---- ------------------------------ ----
ANBOB ANBOB_T2 IDX_B_OTYPE 1 OBJECT_TYPE
IDX_CTIME_ONAME 1 CREATED
2 OBJECT_NAME
IDX_OID 1 OBJECT_ID
INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS
------------- ------------- -------------------- ---------- ---- -------- ---- ---- -- ----------
ANBOB ANBOB_T2 IDX_B_OTYPE BITMAP NO N/A YES N 2 8
ANBOB_T2 IDX_CTIME_ONAME NORMAL NO N/A YES N 3 619
ANBOB_T2 IDX_OID NORMAL NO N/A YES N 2 174复制
Note:
一条命令把原分区表转换成了分区表,同时列上的索引还保护有效, 上面使用了ONLINE关键字, 当然除了这里在线非分区转换分区外, 分区表也可以online MOVE, 这个特性就不再演示了.
上面的命令中还使用了update indexes 选项, 可以使用local, global选项指定现有的索引创建成对应的local还是global分区; 如果只带了update index ,没有指写local 或global选项就像上面的位图索引, ORACLE有自己的索引转换规则:
原Nonprefixed索引保留着原来的特性,如非分区,全局分区索引都不改变;
原Prefixed索引转换为LOCAL索引;
位图索引转换为local索引,无论是否是prefixed索引.复制
有一些限制以下的表不支持:
不能指定该选项对于IOT table;
domain index存在的表;
不能转换非分区表为11g引入的reference-partitioned的分区表;复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
638次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
619次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
518次阅读
2025-04-20 10:07:02
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
518次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
476次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
453次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
451次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
450次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
448次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
396次阅读
2025-04-17 09:30:30
热门文章
移除DataGuard Standby配置导致Primary启动失败
2023-08-17 21335浏览
使用dblink产生的”SELECT /*+ FULL(P) +*/ * FROM XXXXX P ” 解析
2023-06-20 20901浏览
Troubleshooting 'ORA-28041: Authentication protocol internal error' change password 12c R2 DB
2020-04-08 13685浏览
浅谈ORACLE免费数据库Oracle Database XE (Express Edition) 版
2018-10-31 7651浏览
High wait event ‘row cache mutex’ in 12cR2、19c
2020-08-14 5599浏览