网站首页 > 知识剖析 正文
概述
最近在归档某张大表时因需要重建约束,碰到了个ORA-02298类型的报错,这个问题还算比较常见的,这里整理一下一般的处理方法。
思路
产生ORA-02298错误一般是你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入。
主要看两表中的数据是否一致,从表中要关联外键的字段中的数据必须包含在主表相关字段的数据内。
这里是启用外键约束的时候需要去校验两边数据是否一致,很明显是不一致,所以就报了以上的错误。
/*启用约束:
enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束.
enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据.
禁用约束:
disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作.
disable validate :关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.*/
处理方法
1、 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE
Bash
alter table S_SHIP_UNIT_LINE
add constraint FK_SSUL_ORL_GID2 foreign key (OR_LINE_GID)
references ORDER_RELEASE_LINE (ORDER_RELEASE_LINE_GID) NOVALIDATE;
NOVALIDATE是对之前的数据不做校验,后面新增的数据还是会校验的,因为我是删了数据后去做的,所以这个数据一致性是在允许范围内的,就没有做下面的动作了。
2、首先查看两个表对应起来的数据有多少
Bash
select count(*) from S_SHIP_UNIT_LINE t,ORDER_RELEASE_LINE
k where t.OR_LINE_GID= k.ORDER_RELEASE_LINE_GID;
3、分别查看单独的数据
Bash
select count(*) from S_SHIP_UNIT_LINE t;
select count(*) from ORDER_RELEASE_LINE k;
4、找到多的行并删除
Bash
select t.OR_LINE_GID from S_SHIP_UNIT_LINE t where t.OR_LINE_GID
not in (select k.ORDER_RELEASE_LINE_GID from ORDER_RELEASE_LINE k);
5、直接重新执行启用外键的语句,或者删除之前的外键创建新的外键
Bash
alter table S_SHIP_UNIT_LINE
add constraint FK_SSUL_ORL_GID2 foreign key (OR_LINE_GID)
references ORDER_RELEASE_LINE (ORDER_RELEASE_LINE_GID)
VALIDATE;
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
猜你喜欢
- 2024-12-01 Oracle如何创建索引、删除索引、查询索引
- 2024-12-01 一文总结Oracle数据库merge into语法实现及pg自定义函数实现方式
- 2024-12-01 Oracle转换Postgres
- 2024-12-01 Oracle 12c 的安装
- 2024-12-01 XXL-Job 支持 Oracle 改造过程及注意事项
- 2024-12-01 SQL之WHERE子句中常用的运算符
- 2024-12-01 数据库(Oracle)序列(Sequence)的基本使用
- 2024-12-01 Oracle Cloud 甲骨文云新版界面添加IPv6详细图文教程
- 2024-12-01 oracle group by把多行转换为一列
- 2024-12-01 一文看懂Oracle行列转换函数--pivot函数和unpivot函数
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)