ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle分区及分区索引partition_partition index_维护(四)

oracle分区及分区索引partition_partition index_维护(四)

原创 Linux操作系统 作者:wisdomone1 时间:2012-12-29 16:46:46 0 删除 编辑
前几篇主要测试了范围分区的创建及维护,侧重语法方面;
   参见:
http://space.itpub.net/9240380/viewspace-751843
如:创建分区表,添加分区表,删除分区,修改分区属性,合并分区,拆分分区,交换分区等
如下开始学习分区表与主键约束相关知识
 
--------------查询分区表的主键约束,续前是创建普通的主键约束,此约束对应的索引也是普通索引,未进行分区
SQL> select constraint_name from user_constraints where table_name='T_TEST_PARTI
TION_1';
CONSTRAINT_NAME
------------------------------
PK_T_TEST_PARTITION_1
--删除主键约束
SQL> alter table t_test_partition_1 drop primary key;
表已更改。
--确认是否删除主键约束
SQL> select constraint_name from user_constraints where table_name='T_TEST_PARTI
TION_1';
未选定行
 
-----------查询分区表的分区数量
SQL> select table_name,partition_name from user_tab_partitions where table_name=
'T_TEST_PARTITION_1';
TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
T_TEST_PARTITION_1             P1_OLD
T_TEST_PARTITION_1             P2
T_TEST_PARTITION_1             P3
T_TEST_PARTITION_1             P4
T_TEST_PARTITION_1             P5

--查询分区表的表结构
SQL> desc t_test_partition_1;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 REQTIME                                            TIMESTAMP(6)
 CALL_IP                                            VARCHAR2(200)

---修改分区表的列id属性不空为
SQL> alter table t_test_partition_1 modify id not null;
表已更改。
SQL> desc t_test_partition_1;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER(38)
 REQTIME                                            TIMESTAMP(6)
 CALL_IP                                            VARCHAR2(200)
 
 
 ------说明在分区表情况下,如要构建主键约束,须包含分区键列,不然会报错
 SQL> create unique index pk_t_test_partition_1_id on t_test_partition_1(id)
  2  local
  3  (partition p1,
  4   partition p2,
  5   partition p3,
  6   partition p4,
  7   partition p5);
create unique index pk_t_test_partition_1_id on t_test_partition_1(id)
                                                *
第 1 行出现错误:
ORA-14039: 分区列必须构成 UNIQUE 索引的关键字列子集
---包括分区键再次创建成功
SQL> create unique index pk_t_test_partition_1_id on t_test_partition_1(reqtime,
id)
  2  local
  3  (partition p1,
  4   partition p2,
  5   partition p3,
  6   partition p4,
  7   partition p5)
  8  /
索引已创建。

--------基于分区键的本地分区索引数量为5,基于分区键和主键ID的本地唯一分区索引为5
  1* select index_name,partition_name,status from user_ind_partitions where inde
x_name in(select index_name from user_indexes where table_name='T_TEST_PARTITION
_1')order by index_name
SQL> /
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IDX_T_TEST_PARTITION_1_ID      P2_IDX2                        USABLE
IDX_T_TEST_PARTITION_1_ID      P1_OLD                         USABLE
IDX_T_TEST_PARTITION_1_ID      P5_IDX5                        USABLE
IDX_T_TEST_PARTITION_1_ID      P4_IDX4                        USABLE
IDX_T_TEST_PARTITION_1_ID      P3_IDX3                        USABLE
PK_T_TEST_PARTITION_1_ID       P2                             USABLE
PK_T_TEST_PARTITION_1_ID       P1                             USABLE
PK_T_TEST_PARTITION_1_ID       P5                             USABLE
PK_T_TEST_PARTITION_1_ID       P4                             USABLE
PK_T_TEST_PARTITION_1_ID       P3                             USABLE
已选择10行。

---如下扫错原因:2013-01-16 00:00:0000000应与格式对应,即为:2013-01-16 00:00:00.00000
insert into t_test_partition_1 values(3,to_timestamp('2013-01-16 00:00:0000000',
'yyyy-mm-dd hh24:mi:ss.ff'),'2,2,3,3')
                                                     *
第 1 行出现错误:
ORA-01830: 日期格式图片在转换整个输入字符串之前结束
---------调整后再次插入成功
  1* insert into t_test_partition_1 values(3,to_timestamp('2013-01-16 00:00:00.0
0000','yyyy-mm-dd hh24:mi:ss.ff'),'2,2,3,3')
SQL> /
已创建 1 行。

------重复插入违反唯一约束
SQL> /
insert into t_test_partition_1 values(3,to_timestamp('2013-01-16 00:00:00.00000'
,'yyyy-mm-dd hh24:mi:ss.ff'),'2,2,3,3')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_T_TEST_PARTITION_1_ID)

---插入一个新的id,即可插入成功
SQL> insert into t_test_partition_1 values(4,to_timestamp('2013-01-16 00:00:00.0
0000','yyyy-mm-dd hh24:mi:ss.ff'),'2,2,4,3');
已创建 1 行。
-----------id相同,但call_ip不同,同样不能插入报违反主键约束
SQL> insert into t_test_partition_1 values(4,to_timestamp('2013-01-16 00:00:00.0
0000','yyyy-mm-dd hh24:mi:ss.ff'),'2,2,3,3');
insert into t_test_partition_1 values(4,to_timestamp('2013-01-16 00:00:00.00000'
,'yyyy-mm-dd hh24:mi:ss.ff'),'2,2,3,3')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_T_TEST_PARTITION_1_ID)

SQL> desc user_cons_columns;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)
 CONSTRAINT_NAME                           NOT NULL VARCHAR2(30)
 TABLE_NAME                                NOT NULL VARCHAR2(30)
 COLUMN_NAME                                        VARCHAR2(4000)
 POSITION                                           NUMBER

---查主键约束的构建列情况
SQL> select constraint_name,table_name,column_name from user_cons_columns where
table_name='T_TEST_PARTITION_1';
CONSTRAINT_NAME                TABLE_NAME
------------------------------ ------------------------------
COLUMN_NAME
--------------------------------------------------------------------------------
SYS_C0027153                   T_TEST_PARTITION_1
ID

--查询分区表的索引情况
SQL> select index_name from user_indexes where table_name='T_TEST_PARTITION_1';
INDEX_NAME
------------------------------
IDX_T_TEST_PARTITION_1_ID
PK_T_TEST_PARTITION_1_ID

小结:1,对于分区表,构建主键约束,创建语法不同于普通表,而要添加分区键,
     2,本文简述分区表和主键的一些小知识,后续依次展开其它分区类型的学习及测试

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

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12690018