关于primary key和foreign key的问题处理(60天)

今天碰到一个问题,在drop primary key的时候,提示ORA-02273的错误。

SQL> ALTER TABLE AR1_ACCOUNT DROP PRIMARY KEY;
ALTER TABLE AR1_ACCOUNT DROP PRIMARY KEY
*
ERROR at line 1:
ORA-02273: this unique/primary key is referenced by some foreign keys

通过下面的字典表查找的关联的表

SQL> SELECT con.constraint_name const_name, con.constraint_type const_type,
  2         con.table_name, con.search_condition search_cond,
  3         con.r_constraint_name r_const, col.table_name r_table,
       col.column_name r_column
  FROM user_constraints con, user_cons_columns col
 WHERE col.constraint_name = con.r_constraint_name  4    5    6  
  7  AND col.table_name='AR1_ACCOUNT';
CONST_NAME                     C TABLE_NAME                     SEARCH_COND          R_CONST                        R_TABLE                        R_COLUMN
------------------------------ - ------------------------------ -------------------- ------------------------------ ------------------------------ --------------------
AR3_GL_UNBILLED_REV_1FK        R AR3_GL_UNBILLED_REV                                 AR1_ACCOUNT_PK                 AR1_ACCOUNT                    ACCOUNT_ID

到此为止,我想为了保险起见,先把表AR3_GL_UNBILLED_REV的foreign key disable以后,再来drop这个表AR1_ACCOUNT 的primary key

使用alter table xxxx disable constraint xxxx;

执行成功了,但是drop primary key的时候还是提示错误 ORA-02273

没办法,看来disable不行,那只能drop了,为了保险起见,先来spool一下创建constraint 的ddl 语句,但是调用时,又出现了问题。

SQL> SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','AR3_GL_UNBILLED_REV_1FK')FROM DUAL;
ERROR:
ORA-31603: object "AR3_GL_UNBILLED_REV_1FK" of type CONSTRAINT not found in
schema "TEST"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA", line 3149
ORA-06512: at "SYS.DBMS_METADATA", line 4787
ORA-06512: at line 1

查询网上所说,有的人说可能是权限问题,赋予select_catalog_owner权限就好了。但是很奇怪的,怎么试都不行。

最后查了下大家的反馈,确定这是一个bug.这也是dbms_metadata的一个一个限制,在11g版本这个问题依然存在。

最后做了一个表的ddl,这样就包含了foreign key的信息

然后drop了foreign key的constraint之后,drop primary key的操作就可以了继续了。

在脚本最后,需要记得重建那个foreign key.

SQL> ALTER TABLE AR3_GL_UNBILLED_REV ADD CONSTRAINT AR3_GL_UNBILLED_REV_1FK FOREIGN KEY (ACCOUNT_ID) REFERENCES AR1_ACCOUNT(ACCOUNT_ID);
Table altered.

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

警惕:Oracle中删除的分区不会进入回收站(Recyclebin)

在Oracle数据库中,单个删除的分区并不会进入回收站,全表删除的分区才可能和全表一起放入回收站。这是因为单个分区删除之后,是无法通过简单的闪回加入原分区表中,...

3448
来自专栏沃趣科技

应用示例荟萃 | performance_schema全方位介绍(下)

使用performance_schema中的语句当前事件记录表和语句事件历史记录表可以查询数据库中最近执行的一些SQL语句,以及语句相关的信息,这里我们以eve...

1683
来自专栏java达人

join和where区别以及各类join的示例

1 WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接。INNER JOIN……ON子句产生的连接称为显性连接。(其他JOIN参数也是显性连接...

18510
来自专栏数据和云

循序渐进:Oracle 12.2的Sharding基础概念解读

张大朋(Lunar)Oracle 工程师 Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于 O...

2704
来自专栏杨建荣的学习笔记

浅谈exp/imp(上) (r5笔记第81天)

作为DBA,经常需要在不同数据库环境间做数据的导入导出,exp/imp就是这样的轻便快捷的客户端工具,可以很方便的在不同数据库之间转移数据对象,即使数据库位于不...

2638
来自专栏杨建荣的学习笔记

使用dbms_metadata生成建表语句(r2笔记97天)

有时候在工作中,可以使用exp/imp得到表的创建语句。 如果想得到关于table,index,constraint的语句,可以考虑使用dbms_metadat...

2253
来自专栏乐沙弥的世界

Oracle 重建索引脚本

      索引是提高数据库查询性能的有力武器。没有索引,就好比图书馆没有图书标签一样,找一本书自己想要的书比登天还难。然而索引在使用的过程中,尤其是在批量的D...

801
来自专栏乐沙弥的世界

PL/SQL --> DBMS_DDL包的使用

为了便于建立性能良好的PL/SQL程序,Oracle提供了大量的系统包供使用。Oracle提供的这些包扩展并增强了数据库的一些功能,以及突

914
来自专栏杨建荣的学习笔记

临时表空间故障处理 (33天)

最近测试环境需要把一些现有的存储空间匀出一部分来给新增的环境使用。 unix组的人很快就空间按照指定的比例重新切分好了。环境交给我的时候,我先把数据库起来,没有...

3666
来自专栏乐沙弥的世界

排序规则引起的冲突问题

最近在工作中碰到一例因排序规则而导致的冲突问题,运行环境是SQL 2008,具体代码如下:

772

扫码关注云+社区