网站首页 > 技术文章 正文
概述
最近在归档某张大表时因需要重建约束,碰到了个ORA-02298类型的报错,这个问题还算比较常见的,这里整理一下一般的处理方法。
思路
产生ORA-02298错误一般是你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入。
主要看两表中的数据是否一致,从表中要关联外键的字段中的数据必须包含在主表相关字段的数据内。
这里是启用外键约束的时候需要去校验两边数据是否一致,很明显是不一致,所以就报了以上的错误。
/*启用约束:
enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束.
enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据.
禁用约束:
disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作.
disable validate :关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.*/
处理方法
1、 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE
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、首先查看两个表对应起来的数据有多少
select count(*) from S_SHIP_UNIT_LINE t,ORDER_RELEASE_LINE k where t.OR_LINE_GID= k.ORDER_RELEASE_LINE_GID;
3、分别查看单独的数据
select count(*) from S_SHIP_UNIT_LINE t; select count(*) from ORDER_RELEASE_LINE k;
4、找到多的行并删除
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、直接重新执行启用外键的语句,或者删除之前的外键创建新的外键
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-10-16 centos 7下Oracle12c静默安装 linux静默安装oracle11g步骤
- 2024-10-16 如何限制ip访问Oracle数据库? oracle in限制
- 2024-10-16 首次在Linux上安装Oracle数据库,需要提前做好哪些准备工作?
- 2024-10-16 Linux环境中oracle数据库启动过程
- 2024-10-16 lnmp环境下连接oracle数据库php连接oracle
- 2024-10-16 oracle11在centos7实战部署踏坑记
- 2024-10-16 oracle 11g服务器,plsql客户端安装配置
- 2024-10-16 Oracle学习笔记(六)Oracle数据库基础
- 2024-10-16 3.Oracle集群安装—配置文件 oracle集群部署
- 2024-10-16 数据库笔试面试155——在Oracle中,创建ASM磁盘的方式有哪几种?
你 发表评论:
欢迎- 05-10如何优化数据库和前端之间的交互?
- 05-10前端代码优化小秘籍(前端优化24条建议)
- 05-10VS Code当中的15个神仙插件,值得收藏
- 05-10如何自己开发一个Google浏览器插件?
- 05-10前端流行框架Vue3教程:14. 组件传递Props效验
- 05-10吃了一年的SU,最好用的插件都在这了
- 05-10前端必看!这款神器让网站界面告别千篇一律
- 05-10程序员请收好:10个非常有用的 Visual Studio Code 插件
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle查询数据库 (45)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)