关于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 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

ORA-01658 错误

最近重新装个了Oracle 11g,在对分区表导入导出时碰到了ORA-01658错误的问题,因为刚刚才装的新系统,一导出就碰到了下面的问题,

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

ORACLE数据文件名导致的奇怪问题 (51天)

今天创建了一些表空间,准备做data guard来看看效果。 为了方便起见,我用gridcontrol来做,主库也开了Omf,省去了好多步骤。 一路点下来,就等...

3084
来自专栏简单聊聊Spark

Hive基本操作

9.在hive中创建一张表的时候,同时为某一个字段指定为partition,这里其实还是创建了一个有三个字段的表,只是username被当作partition掉...

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

外部表的导入导出问题 (41天)

今天尝试了一下用exp导出外部表,碰到了一些问题。 ----导出 今天导出的时候发现一个严重的问题,导出一个很小的外部表花了很长时间,最后还是报错,而且生成的d...

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

有关Oracle role的总结

oracle的role算是对sys privilege 和object privilege的打包。 今天深入的测试了下,还算有不少的东西。 role不是sche...

3506
来自专栏Aloys的开发之路

oracle表空间不足相关问题解决办法

oracle 临时表空间和数据表空间 Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据...

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

关于sysdba,sysoper,dba的区别(r3笔记第62天)

关于sysdba,sysoper,dba这些名词在工作中可能接触的比较多,如果接触的环境是服务器端的,sysdba可能是经常用到的。如果是数据库的维护工作,db...

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

使用awk来解析dump文件 (73天)

dump文件是平时工作中经常碰见的,有时候得到一个dump,但是没有提供一些更多的信息,导入的时候就很可能会有问题。 如果某个用户默认表空间是user,但是du...

3458
来自专栏乐沙弥的世界

使用带dblink方式的datapump迁移Oracle 10g到11g

      对于从Oracle 10g下迁移数据库到Oracle 11g,除了使用RMAN方式之外,我们可以使用带dblink的datapump方式来实现基于逻...

451
来自专栏乐沙弥的世界

Linux/Unix shell 自动发送AWR report

     观察Oracle数据库性能,Oracle自带的awr 功能为我们提供了一个近乎完美的解决方案,通过awr特性我们可以随时从数据库提取awr报告。不过...

583

扫描关注云+社区