解决导入过程中出现的ORA-02289错误

用expdp导出生产库数据到测试库,执行impdp的时候报了ORA-02298错误,提示生效TBL_B表的外键约束FK_B_ID的时候出错,

看看ORA-02298的错误描述,因为存在独立的字节点记录,导致生效约束操作报错,

通俗一些,就是子表外键对应的主表主键/唯一约束键值不存在,所以此时无法生效外键约束。

方案1:

既然错误提示子表存在一些主表无记录的外键值,那么只要找出这些不符合主外键关系的子表记录,并且删除这些,保证子表中的外键记录,主表中均有对应的记录。

创建测试表和相应数据,

主表不存在id=2这条记录,但子表中存在外键字段id_a=2的这条记录,只是由于disable了约束所以才可以insert,但实际此时是无法enable约束,这和上面执行impdp的效果相同,

使用如下SQL,可以找出子表TBL_B中外键字段id_a的值未在主表TBL_A中有定义的记录,并且删除,

此时就可以正常enable约束。

使用如下SQL,可以根据子表名称和子表外键约束名称,自动拼接出需要删除子表非法数据的SQL语句,复制出来继续执行就行,

SELECT ' delete from '
 || a.table_name
 || ' a  where not exists ( select 1 from '
 || c_pk.table_name
 || ' b  where b.'
 || b.column_name
 || '=a.'
 || a.column_name
 ||');'
FROM user_cons_columns a
JOIN user_constraints c
ON a.constraint_name = c.constraint_name
JOIN user_constraints c_pk
ON c.r_constraint_name = c_pk.constraint_name
JOIN user_cons_columns b
ON c_pk.constraint_name = b.constraint_name
WHERE c.constraint_type = 'R'
AND upper(a.table_name) = upper('&Table_Name')
AND upper(a.constraint_name) = upper('&FK_NAME');

可以从我的GitHub上下载这一个SQL脚本,

https://github.com/bisal-liu/oracle/blob/832c9c34c068981405a68bae55de885d78cf7bca/solve_illegal_constraint_data

方案2:
出现错误的根本原因,是因为expdp导出的过程中,对于数据表是有DML操作的,即执行expdp指令导出的数据并不能确保属于同一个事务,要从根本解决这问题,就需要确保执行expdp的操作对应的数据属于同一个事务。

exp下可以使用consistent参数,默认值是N,

CONSISTENT cross-table consistency(N)

使用consistent=y,则会设置set transaction read only,即使用了只读事务机制,保证exp导出数据属于一个事务了,

但其有一些弊端,例如由于需要读取回滚段中未提交的事务数据,因此exp表会变慢,同时官方文档列出了一些使用consistent=y的适用场景以及注意事项,

expdp下可以使用flashback_scn和flashback_time参数,和闪回表类似,支持设置SCN和TIME两种,

FLASHBACK_SCN介绍,

FLASHBACK_TIME介绍,

总结:

1. 解决ORA-02289错误,要理解其本质,即子表外键值存在不属于主表主键/唯一约束键的情况。

2. 一种方法是手工删除子表中存在的非法数据,保证主子表关系正确。

3. 一种方法是保证导出的时候就要求数据属于同一事物,不受其他事务的影响,此时exp有consistent参数,expdp有flashback_scn和flashback_time参数可以支持此操作,而且需要清楚用这些参数的原理、弊端,以及适用场景。

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

时间: 2024-09-20 20:52:15

解决导入过程中出现的ORA-02289错误的相关文章

分享站长seo优化过程中容易犯的细节错误

互联网进入人们生活后,网络营销已经成为企业主要的营销方式,seo优化的技术也被各大企业所重视,鉴于搜索引擎算法的不断更新,站长们在优化过程中可能会犯一些细节错误,笔者给大家总结了些常见的seo优化错误,分享给大家共同学习,也欢迎大家补充交流. 一.百度快照不代表关键词排名 百度快照是百度蜘蛛对当前页面抓取返回的存档,很多站长的优化观点中存在:快照日期越新,网站权重值越高,关键词排名越好,反之越低.事实可证明肯定的说,快照与排名关系不大,网站快照的更新频率与权重并不存在任何直接的关系. 二.黑帽s

ubuntu-安装maven过程中出错,怎么根据错误应对?

问题描述 安装maven过程中出错,怎么根据错误应对? 我是在ubuntu环境下使用eclipse的Marketplace来安装Maven的,提示的错误如下: Cannot complete the install because one or more required items could not be found. Software being installed: m2e - Maven Integration for Eclipse (includes Incubating comp

谈论一下seo做友情链接过程中遇到的几种错误观点

摘要: 换友情链接是我们SEOER不得不开展的一项工作,随之而来的是我们必须知道交换什么样的链接才是优质链接,我们从哪些方面来判断对方的链接是优质的,对我们网站是有帮助的,今天 换友情链接是我们SEOER不得不开展的一项工作,随之而来的是我们必须知道交换什么样的链接才是优质链接,我们从哪些方面来判断对方的链接是优质的,对我们网站是有帮助的,今天武汉SEO主要和大家谈论一下做友情链接过程中遇到的几种错误观点: 一 网站的PR 本来PR现在已经不是被站长关注,但是就在前不久PR又再一次更新了,这又引

布线过程中避免10个主要错误

综合布线是一种模块化的.灵活性极高的建筑物内或建筑群之间的信息传输通道.通过它可使话音设备.数据设备.交换设备及各种控制设备与信息管理系统连接起来,同时也使这些设备与外部通信网络相连的综合布线. 那么,实际布线中大家需要避免什么错误? 实际布线大家需要避免的十项错误 一.未对整体网络进行前瞻性规划 目前千兆网络已经开始普及,但还有很多公司需要继续使用百兆到桌面的网络连接.例如,一些公司需要搬迁到新的办公地点,这就必须对网络线路进行重新部署,这时是应该采用可以满足当前应用的传统的网线技术,还是选择

从专业角度为电商同仁解决创业过程中遇到的最实际的问题

在29日主会场<移动新势力>的互动环节中,由NTA创新传播创始人申音主持,参与互动的嘉宾分别是唱吧CEO陈华.美丽说CEO徐易容.魔漫相机CEO任晓倩.口袋通创始人白鸦.几位嘉宾从企业发展历程.如何保持产品新鲜感以及未来在移动端如何布局与观众进行分享. 唱吧,是一款免费的社交K歌手机应用,最大的特点锁定KTV领域,努力把基本的功能做扎实做深做透,加上做一些强化一些社交的功能,让用户的关系沉淀下来. 美丽说是一个女性购物分享社区,目前70%到75%的交易额来源于移动端,因用户比较年轻,手机用户里

java多线程的等待唤醒机制及如何解决同步过程中的安全问题

/* class Person{ String name; String sex; boolean flag = true; public void setPerson(String name, String sex){ this.sex=sex; this.name=name; } } class Input implements Runnable{ int x=0; Person p; Input(Person p){ this.p=p; } public void run(){ while

网页标准:CSS编写过程中常见的10个错误

css|标准|错误|过程|网页 对于初学CSS布局的人也许会有很大的帮助.有经验的开发者在调试CSS布局时也能得到些启发. 1. 检查HTML元素是否有拼写错误.是否忘记结束标记 即使是老手也经常会弄错div的嵌套关系.可以用dreamweaver的验证功能检查一下有无错误. 2. 检查CSS是否正确 检查一下有无拼写错误.是否忘记结尾的 } 等.可以利用CleanCSS来检查 CSS的拼写错误.CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误. 3. 确定错误发生的位置 如果错误影

总结:CSS编写过程中常见的10个错误

css|错误|过程 1. 检查HTML元素是否有拼写错误.是否忘记结束标记 即使是老手也经常会弄错div的嵌套关系.可以用dreamweaver的验证功能检查一下有无错误. 2. 检查CSS是否正确 检查一下有无拼写错误.是否忘记结尾的 } 等.可以利用CleanCSS来检查 CSS的拼写错误.CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误. 3. 确定错误发生的位置 如果错误影响了整体布局,则可以逐个删除div块,直到删除某个div块后显示恢复正常,即可确定错误发生的位置. 4.

解决Word 2010中的标记格式不一致错误

在Word 2010文档中启用"保持格式跟踪"功能的同时再启用"标记格式不一致错误"功能,可以在执 行"选择格式相似的文本"命令时,使用蓝色的波浪下划线标出格式相似但不完全相同的文字.启用"标记格 式不一致错误"功能的步骤如下所述: 第1步,打开Word 2010文档窗口,依次单击"文件"→"选项"按钮,如图2012010103所示. 图2012010103 选 择"选项&qu