11G Oracle新增了参考分区,使得主表和子表可以根据主表上的列实现等同分区。
由于参考分区的分区操作都是在主表上进行,而子表会根据主表的分区操作自动进行,所以Oracle提供了DEPENDENT TABLE语句来设置子表的分区存储语句。
看一个简单的例子:
SQL> CREATE TABLE T_PRIMARY 2 ( 3 OWNER VARCHAR2(30), 4 TABLE_NAME VARCHAR2(30), 5 TABLESPACE_NAME VARCHAR2(30), 6 STATUS VARCHAR2(18), 7 CONSTRAINT PK_T_PRIMARY PRIMARY KEY (OWNER, TABLE_NAME) 8 ) 9 PARTITION BY LIST (TABLESPACE_NAME) 10 ( 11 PARTITION P1 VALUES ('SYSTEM'), 12 PARTITION P2 VALUES ('YANGTK'), 13 PARTITION P3 VALUES ('SYSAUX'), 14 PARTITION P4 VALUES (DEFAULT) 15 ); 表已创建。 SQL> CREATE TABLE T_FOREIGN 2 ( 3 OWNER VARCHAR2(30) NOT NULL, 4 TABLE_NAME VARCHAR2(30) NOT NULL, 5 PARTITION_NAME VARCHAR2(30), 6 SUBPARTITION_NAME VARCHAR2(30), 7 NUM_ROWS NUMBER, 8 BLOCKS NUMBER, 9 CONSTRAINT FK_T_FOREIGN FOREIGN KEY (OWNER, TABLE_NAME) 10 REFERENCES T_PRIMARY (OWNER, TABLE_NAME) 11 ) 12 PARTITION BY REFERENCE (FK_T_FOREIGN); 表已创建。 SQL> SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME 2 FROM USER_TAB_PARTITIONS 3 WHERE TABLE_NAME IN ('T_PRIMARY', 'T_FOREIGN'); TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ T_PRIMARY P1 USERS T_PRIMARY P2 USERS T_PRIMARY P3 USERS T_PRIMARY P4 USERS T_FOREIGN P1 USERS T_FOREIGN P2 USERS T_FOREIGN P3 USERS T_FOREIGN P4 USERS 已选择8行。
复制
子表根据主表的TABLESPACE_NAME列实现了等同分区,如果合并P3和P4分区:
SQL> ALTER TABLE T_PRIMARY 2 MERGE PARTITIONS P3, P4 3 INTO PARTITION P3 4 TABLESPACE YANGTK; 表已更改。 SQL> SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME 2 FROM USER_TAB_PARTITIONS 3 WHERE TABLE_NAME IN ('T_PRIMARY', 'T_FOREIGN'); TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ T_PRIMARY P1 USERS T_PRIMARY P2 USERS T_PRIMARY P3 YANGTK T_FOREIGN P1 USERS T_FOREIGN P2 USERS T_FOREIGN P3 YANGTK 已选择6行。
复制
可以看到,如果不明确指定子表的存储参数,则默认情况下子表的分区依赖主表的分区设置,下面是一个使用DEPENTENT TABLE明确指出子表存储语句的例子:
SQL> ALTER TABLE T_PRIMARY 2 MERGE PARTITIONS P2, P3 3 INTO PARTITION P2 4 TABLESPACE YANGTK 5 DEPENDENT TABLES (T_FOREIGN(PARTITION PF_2 TABLESPACE TEST)); 表已更改。 SQL> SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME 2 FROM USER_TAB_PARTITIONS 3 WHERE TABLE_NAME IN ('T_PRIMARY', 'T_FOREIGN'); TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ T_PRIMARY P1 USERS T_PRIMARY P2 YANGTK T_FOREIGN P1 USERS T_FOREIGN PF_2 TEST
复制
DEPENDENT TABLES语句可以同时指定多个表的多个分区,下面看一个复杂一点的例子:
SQL> CREATE TABLE T_FOREIGN2 2 ( 3 OWNER VARCHAR2(30) NOT NULL, 4 TABLE_NAME VARCHAR2(30) NOT NULL, 5 SEGMENT_NAME VARCHAR2(30), 6 BYTES NUMBER, 7 CONSTRAINT FK_T_FOREIGN2 FOREIGN KEY (OWNER, TABLE_NAME) 8 REFERENCES T_PRIMARY (OWNER, TABLE_NAME) 9 ) 10 PARTITION BY REFERENCE (FK_T_FOREIGN2); 表已创建。 SQL> SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME 2 FROM USER_TAB_PARTITIONS 3 WHERE TABLE_NAME IN ('T_PRIMARY', 'T_FOREIGN', 'T_FOREIGN2'); TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ T_PRIMARY P1 USERS T_PRIMARY P2 YANGTK T_FOREIGN P1 USERS T_FOREIGN PF_2 TEST T_FOREIGN2 P1 USERS T_FOREIGN2 P2 YANGTK 已选择6行。
复制
下面对T_PRIMARY表执行SPLIT操作:
SQL> ALTER TABLE T_PRIMARY 2 SPLIT PARTITION P2 3 VALUES ('YANGTK') 4 INTO (PARTITION P2 TABLESPACE YANGTK, 5 PARTITION P3 TABLESPACE TEST) 6 DEPENDENT TABLES 7 (T_FOREIGN(PARTITION P2 TABLESPACE TEST, 8 PARTITION P3 TABLESPACE USERS), 9 T_FOREIGN2(PARTITION P22 TABLESPACE USERS, 10 PARTITION P23 TABLESPACE YANGTK)); 表已更改。 SQL> SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME 2 FROM USER_TAB_PARTITIONS 3 WHERE TABLE_NAME IN ('T_PRIMARY', 'T_FOREIGN', 'T_FOREIGN2'); TABLE_NAME PARTITION_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ T_PRIMARY P1 USERS T_PRIMARY P2 YANGTK T_PRIMARY P3 TEST T_FOREIGN P1 USERS T_FOREIGN P2 TEST T_FOREIGN P3 USERS T_FOREIGN2 P1 USERS T_FOREIGN2 P22 USERS T_FOREIGN2 P23 YANGTK 已选择9行。
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
624次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
613次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
509次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
497次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
473次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
449次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
443次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
441次阅读
2025-04-30 12:17:56
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
440次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
390次阅读
2025-04-17 09:30:30