Oracle SQL 主键卡住了
Oracle SQL primary key stuck
我运行遇到了一个奇怪的问题。我正在创建当前存在的 table 的副本并向它们添加分区。
过程如下:
重命名当前约束(如果不删除 table 本身就不能删除它们,因为稍后我需要数据)
创建一个在结构上复制当前分区的新分区 table。
所以我有 MYTABLE
(原始)和 PART_TABLE
(新分区),包括 FKs
用INSERT INTO SELECT
子句复制数据
用索引和主键改变 table
重命名 tables 所以我最终得到 MYTABLE
(新分区)和 TRASH_TABLE
(原始)
不幸的是,我在第 4 步中遇到错误
ALTER TABLE MYTABLE ADD CONSTRAINT "PK_MYTABLE"
PRIMARY KEY ("MY_ID", "SEQUENCE")
USING INDEX LOCAL TABLESPACE INDEXSPACE;
SQL Error: ORA-00955: "name is already used by an existing object"
现在,我从逻辑上假设我只是忘记了重命名 PK,所以我检查了 TRASH_TABLE
,但我在那里看到了正确重命名的 PK。
我也运行
SELECT *
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME LIKE 'PK_MYTABLE'
它返回了 0 个结果。与 table USER_CONSTRAINTS
.
相同
重命名的 PK 显示正确。
我注意到的另一件事是只有 PK 是这样锁定的。添加 FK 或 UNIQUE 约束就可以了。
如How to rename a primary key in Oracle such that it can be reused, the problem is that Oracle creates an index for the primary key. You need to rename the autogenerated index as well. As suggested by Tony Andrews所述,尝试
ALTER INDEX "PK_MYTABLE" RENAME TO "PK_MYTABLE_OLD";
我运行遇到了一个奇怪的问题。我正在创建当前存在的 table 的副本并向它们添加分区。
过程如下:
重命名当前约束(如果不删除 table 本身就不能删除它们,因为稍后我需要数据)
创建一个在结构上复制当前分区的新分区 table。 所以我有
MYTABLE
(原始)和PART_TABLE
(新分区),包括 FKs用
INSERT INTO SELECT
子句复制数据用索引和主键改变 table
重命名 tables 所以我最终得到
MYTABLE
(新分区)和TRASH_TABLE
(原始)
不幸的是,我在第 4 步中遇到错误
ALTER TABLE MYTABLE ADD CONSTRAINT "PK_MYTABLE"
PRIMARY KEY ("MY_ID", "SEQUENCE")
USING INDEX LOCAL TABLESPACE INDEXSPACE;
SQL Error: ORA-00955: "name is already used by an existing object"
现在,我从逻辑上假设我只是忘记了重命名 PK,所以我检查了 TRASH_TABLE
,但我在那里看到了正确重命名的 PK。
我也运行
SELECT *
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME LIKE 'PK_MYTABLE'
它返回了 0 个结果。与 table USER_CONSTRAINTS
.
重命名的 PK 显示正确。
我注意到的另一件事是只有 PK 是这样锁定的。添加 FK 或 UNIQUE 约束就可以了。
如How to rename a primary key in Oracle such that it can be reused, the problem is that Oracle creates an index for the primary key. You need to rename the autogenerated index as well. As suggested by Tony Andrews所述,尝试
ALTER INDEX "PK_MYTABLE" RENAME TO "PK_MYTABLE_OLD";