12
返回列表 发新帖
楼主: 〇〇

带唯一约束的表分区交换为什么一定要求临时表也有唯一约束

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
11#
 楼主| 发表于 2011-2-10 15:42 | 只看该作者
回9楼
SQL> create table tp(id int)partition by range(id)(partition p1 values less than (5),partition p2 values less than (maxvalue));

表已创建。

SQL>
SQL> insert into tp select level  from dual connect by level<=10;

已创建10行。

SQL>
SQL> commit;

提交完成。

SQL>
SQL> create table ttemp as select * from tp where 1=2;

表已创建。

SQL>
SQL> alter table tp add primary key(id);

表已更改。

SQL>
SQL> alter table tp exchange partition P1 with table ttemp WITHOUT VALIDATION;

表已更改。

SQL> select * from ttemp;

        ID
----------
         1
         2
         3
         4

SQL> alter table tp exchange partition P1 with table ttemp WITHOUT VALIDATION;
alter table tp exchange partition P1 with table ttemp WITHOUT VALIDATION
*
第 1 行出现错误:
ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配


SQL> desc tp
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
ID                                        NOT NULL NUMBER(38)

SQL> desc ttemp
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER(38)



SQL> alter table ttemp modify id not null;

表已更改。

SQL> desc ttemp
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
ID                                        NOT NULL NUMBER(38)

SQL> alter table tp exchange partition P1 with table ttemp WITHOUT VALIDATION;
alter table tp exchange partition P1 with table ttemp WITHOUT VALIDATION
*
第 1 行出现错误:
ORA-14130: UNIQUE 约束条件在 ALTER TABLE EXCHANGE PARTITION 中不匹配

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
12#
 楼主| 发表于 2011-2-10 15:52 | 只看该作者
SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE from USER_CONSTRAINTS where TABLE_NAME='TP';

CONSTRAINT_NAME                C
------------------------------ -
SYS_C0025309                   P

SQL> ALTER TABLE tp DISABLE CONSTRAINT SYS_C0025309 KEEP INDEX;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;
alter table tp exchange partition P1 with table ttemp
*
第 1 行出现错误:
ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配


SQL> alter table tp modify id not null;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> select * from tp;

        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10

已选择10行。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> select * from ttemp;

        ID
----------
         1
         2
         3
         4

SQL> update ttemp set id=-id;

已更新4行。

SQL> commit;

提交完成。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> select * from tp;

        ID
----------
        -1
        -2
        -3
        -4
         5
         6
         7
         8
         9
        10

已选择10行。

SQL>

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
13#
 楼主| 发表于 2011-2-10 15:54 | 只看该作者
SQL> ALTER TABLE tp enABLE CONSTRAINT SYS_C0025309 ;
ALTER TABLE tp enABLE CONSTRAINT SYS_C0025309
*
第 1 行出现错误:
ORA-14063: 唯一/主约束条件关键字中存在无用索引

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
14#
 楼主| 发表于 2011-2-10 15:58 | 只看该作者
SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME from USER_CONSTRAINTS where TABLE_NAME='TP';

CONSTRAINT_NAME                C INDEX_NAME
------------------------------ - ------------------------------
SYS_C0025309                   P
SYS_C0025311                   C

SQL> select INDEX_TYPE,INDEX_NAME from USER_INDEXES where TABLE_NAME='TP';

INDEX_TYPE                  INDEX_NAME
--------------------------- ------------------------------
NORMAL                      SYS_C0025309

SQL> alter index  SYS_C0025309 rebuild parallel 8;

索引已更改。

SQL> ALTER TABLE tp enABLE CONSTRAINT SYS_C0025309;

表已更改。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
15#
 楼主| 发表于 2011-2-10 16:33 | 只看该作者
SQL> ALTER TABLE tp DISABLE CONSTRAINT SYS_C0025309 KEEP INDEX;

表已更改。

SQL>
SQL> alter table tp modify id null;

表已更改。

SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME from USER_CONSTRAINTS where TABLE_NAME='TP';

CONSTRAINT_NAME                C INDEX_NAME
------------------------------ - ------------------------------
SYS_C0025309                   P

SQL> alter table ttemp modify id null;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL> alter table tp exchange partition P1 with table ttemp;

表已更改。

SQL>

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
16#
发表于 2011-2-11 03:01 | 只看该作者
Please explain after you post the code. What's your point?

As I said, I hope you can test with no index, no constraint other than not null. I believe the not null constraint alone causes the problem.

Yong Huang

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
17#
 楼主| 发表于 2011-2-11 06:24 | 只看该作者
试验的结果说明
ORA-14097 由于not null产生
ORA-14130 由于unique index产生

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表