11g以前的分区表,需要指定一个或多个分区字段,并根据这个分区字段的值,按照一定的算法(RANGE、HASH和LIST)来决定一条记录属于那个分区。
从11g开始,Oracle允许用户不指定分区列,完全根据程序来控制数据存储在那个分区中。这就是11g提供的系统分区功能。
在以前,确定了分区列和分区方式,那么一条数据属于哪个分区也就被确定下来。而对于系统分区而言,分区是分区,数据是数据,二者没有对应的关系。数据可以被放在任意一个分区中,这不是由数据本身决定的,而是应用程序在插入时确定的。
SQL> CREATE TABLE T_SYSTEM 2 (ID NUMBER, NAME VARCHAR2(30)) 3 PARTITION BY SYSTEM 4 (PARTITION P1, PARTITION P2, PARTITION P3, PARTITION P4); 表已创建。 SQL> INSERT INTO T_SYSTEM VALUES (1, 'ABC'); INSERT INTO T_SYSTEM VALUES (1, 'ABC') * 第 1 行出现错误: ORA-14701: 对于按“系统”方法进行分区的表, 必须对 DML 使用分区扩展名或绑定变量
复制
对于系统分区表,插入的时候必须指定分区:
SQL> INSERT INTO T_SYSTEM PARTITION (P1) VALUES (1, 'ABC'); 已创建 1 行。 SQL> INSERT INTO T_SYSTEM PARTITION (P2) VALUES (1, 'ABC'); 已创建 1 行。 SQL> SELECT ROWID, ID, NAME FROM T_SYSTEM; ROWID ID NAME ------------------ ---------- ------------------------------ AAARcdAAFAAAB2nAAA 1 ABC AAARceAAFAAAB2vAAA 1 ABC SQL> SELECT ID, NAME, 2 (SELECT SUBOBJECT_NAME FROM USER_OBJECTS WHERE DATA_OBJECT_ID = DBMS_ROWID.ROWID_OBJECT(A.ROWID)) 3 FROM T_SYSTEM A; ID NAME (SELECTSUBOBJECT_NAMEFROMUSER_ ---------- ------------------------------ ------------------------------ 1 ABC P1 1 ABC P2
复制
从上面可以看到,对于SYSTEM分区方式,完全相同的数据也可以插入到两个不同的分区中。数据和分区没有任何关系。
对于系统分区表可以使用绝大部分分区维护功能,除了ALTER TABLE SPLIT PARTITION功能。因为没有分区列,Oracle无法将分区中的数据分配到两个新的分区中。
同样的道理,采用了系统分区的分区表是不能通过CREATE TABLE AS SELECT方式创建的。
而且,由于没有分区列,因此无法创建唯一的LOCAL索引。
系统分区方式继承了分区带来的可用性和易维护性的好处,但是分区消除对于系统分区是无效的。由于不清楚数据存放在那个分区,因此对于系统分区中数据的查找需要在所有分区中进行。
系统分区要求INSERT语句必须包括分区描述语句,SELECT、UPDATE和DELETE语句则不需要。如果考虑到分区消除对系统分区无效,那么如果了解数据存储在哪个分区中,最好在DML的时候指定分区,这样可以提供查询的性能,避免全表扫描的产生。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
548次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
469次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
446次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
445次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
444次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
438次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
414次阅读
2025-04-22 00:13:51
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
413次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
393次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
358次阅读
2025-04-17 17:02:24