我遇到了一个奇怪的问题。我正在创建当前现有表的副本,并向它们添加分区。
流程如下:
重命名当前约束(不能删除它们而不删除表本身,因为稍后我将需要数据)
创建一个新的分区表,该表在结构上复制当前表。所以我有MYTABLE
(原始)和PART_TABLE
(新分区),包括FK
使用INSERT INTO SELECT
子句复制数据
用索引和PK更改表
重命名表,所以我最终得到MYTABLE
(新分区)和TRASH_TABLE
(原始)
不幸的是,在第4步中,我遇到了一个错误
ALTER TABLE MYTABLE ADD CONSTRAINT "PK_MYTABLE"
PRIMARY KEY ("MY_ID", "SEQUENCE")
USING INDEX LOCAL TABLESPACE INDEXSPACE;
SQL错误:ORA-00955:“名称已被现有对象使用”
现在,我从逻辑上假设我只是忘记了重命名PK,所以我检查了一下TRASH_TABLE
,但是看到正确重命名的PK。
我也跑了
SELECT *
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME LIKE 'PK_MYTABLE'
它返回了0个结果。与表相同USER_CONSTRAINTS
。
重命名的PK正确显示。
我注意到的另一件事是,只有PK以这种方式锁定。添加FK或UNIQUE约束就可以了。
如如何在Oracle中重命名主键以便可以重用那样,问题在于Oracle为主键创建了一个索引。您还需要重命名自动生成的索引。根据Tony Andrews的建议,尝试
ALTER INDEX "PK_MYTABLE" RENAME TO "PK_MYTABLE_OLD";
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句