前几篇主要测试了范围分区的创建及维护,侧重语法方面;
参见:
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/
,如需转载,请注明出处,否则将追究法律责任。