ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 参考分区的DEPENDENT TABLE语句

参考分区的DEPENDENT TABLE语句

原创 Linux操作系统 作者:willing66 时间:2010-03-08 19:04:17 0 删除 编辑
参考分区的DEPENDENT TABLE语句

引自:http://space.itpub.net/4227/viewspace-628310


11GOracle新增了参考分区,使得主表和子表可以根据主表上的列实现等同分区。
由于参考分区的分区操作都是在主表上进行,而子表会根据主表的分区操作自动进行,所以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行。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/276487/viewspace-628928/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-22

  • 博文量
    100
  • 访问量
    183659