代码改变世界

Oracle并行添加主键的方法

  AlfredZhao  阅读(4819)  评论(0编辑  收藏  举报
环境:Oracle 11.2.0.3
需求:生产一张表由于前期设计不当,没有主键。现需要添加主键,数据量很大,想并行建立。
 
1.直接添加,提示ora-3001:未实施的功能;只能单线程建立主键
1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> alter table t add constraint pk_t primary key (object_id) using index online parallel 2;
 
alter table t add constraint pk_t primary key (object_id) using index online parallel 2
 
ORA-03001: 未实施的功能
 
SQL> alter table t add constraint pk_t primary key (object_id) using index online;
 
Table altered
 
SQL> alter table t drop primary key;
 
Table altered
 
2.考虑先并行添加惟一性索引,再添加主键
1
2
3
4
5
6
7
8
9
10
11
SQL> create unique index pk_t on t(object_id) parallel 2 online;
 
Index created
 
SQL> alter table t add constraint pk_t primary key (object_id);
 
Table altered
 
SQL> alter index pk_t noparallel;
 
Index altered
 
3.对比主键和惟一性索引的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
SQL> desc t
Name           Type          Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER          VARCHAR2(30)  Y                       
OBJECT_NAME    VARCHAR2(128) Y                       
SUBOBJECT_NAME VARCHAR2(30)  Y                       
OBJECT_ID      NUMBER                                
DATA_OBJECT_ID NUMBER        Y                       
OBJECT_TYPE    VARCHAR2(19)  Y                       
CREATED        DATE          Y                       
LAST_DDL_TIME  DATE          Y                       
TIMESTAMP      VARCHAR2(19)  Y                       
STATUS         VARCHAR2(7)   Y                       
TEMPORARY      VARCHAR2(1)   Y                       
GENERATED      VARCHAR2(1)   Y                       
SECONDARY      VARCHAR2(1)   Y                       
NAMESPACE      NUMBER        Y                       
EDITION_NAME   VARCHAR2(30)  Y                       
 
SQL> alter table t drop primary key;
 
Table altered
 
SQL> desc t
Name           Type          Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER          VARCHAR2(30)  Y                       
OBJECT_NAME    VARCHAR2(128) Y                       
SUBOBJECT_NAME VARCHAR2(30)  Y                       
OBJECT_ID      NUMBER        Y                       
DATA_OBJECT_ID NUMBER        Y                       
OBJECT_TYPE    VARCHAR2(19)  Y                       
CREATED        DATE          Y                       
LAST_DDL_TIME  DATE          Y                       
TIMESTAMP      VARCHAR2(19)  Y                       
STATUS         VARCHAR2(7)   Y                       
TEMPORARY      VARCHAR2(1)   Y                       
GENERATED      VARCHAR2(1)   Y                       
SECONDARY      VARCHAR2(1)   Y                       
NAMESPACE      NUMBER        Y                       
EDITION_NAME   VARCHAR2(30)  Y                       
总结:
对于已有大量数据的表无法并行建立主键,可以先并行建立惟一性索引然后再加上主键。
主键不能为空,惟一性索引可以为空。
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示