前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解决导入过程中出现的ORA-02289错误

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

作者头像
bisal
发布于 2019-01-29 08:15:08
发布于 2019-01-29 08:15:08
1.7K0
举报

用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的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年09月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Pytorch 多卡并行训练
DataParallel 使用起来非常方便,我们只需要用 DataParallel 包装模型,再设置一些参数即可。需要定义的参数包括:参与训练的 GPU 有哪些,device_ids=gpus;用于汇总梯度的 GPU 是哪个,output_device=gpus[0] 。DataParallel 会自动帮我们将数据切分 load 到相应 GPU,将模型复制到相应 GPU,进行正向传播计算梯度并汇总:
为为为什么
2022/08/09
4.2K0
Pytorch 多卡并行训练
class torch.nn.parallel.DistributedDataParallel()
torch.nn.parallel.DistributedDataParallel(module, device_ids=None, output_device=None, dim=0, broadcast_buffers=True, process_group=None, bucket_cap_mb=25, find_unused_parameters=False, check_reduction=False)[source]
狼啸风云
2020/05/11
1.9K0
当代研究生应当掌握的并行训练方法(单机多卡)
每天给你送来NLP技术干货! ---- 排版:AI算法小喵 1. Take-Away 笔者使用 PyTorch 编写了不同加速库在 ImageNet 上的使用示例(单机多卡)。需要的同学可以当作 quickstart 将所需要的部分 copy 到自己的项目中(Github 请点击下面链接): nn.DataParallel[1] 简单方便的 nn.DataParallel torch.distributed[2] 使用 torch.distributed 加速并行训练 torch.multiprocessi
zenRRan
2022/08/26
1.7K0
当代研究生应当掌握的并行训练方法(单机多卡)
Pytorch分布式训练
简单来说,如果数据集较小时推荐尽量使用Map式Dataset,数据量过大、数据量未知、训练内存无法满足时只能使用Iterable式构建Dataset。
iResearch666
2023/09/13
1.4K0
Pytorch分布式训练
深入理解Pytorch中的分布式训练
作者:台运鹏 (正在寻找internship...) 主页:https://yunpengtai.top
zenRRan
2023/01/12
1.4K0
深入理解Pytorch中的分布式训练
torch.nn.SyncBatchNorm
torch.nn.SyncBatchNorm(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, process_group=None)[source]
狼啸风云
2020/05/09
2.7K0
torch.nn.SyncBatchNorm
PyTorch多GPU并行训练方法及问题整理
以下都在Ubuntu上面进行的调试, 使用的Ubuntu版本包括14, 18LST
公众号机器学习与AI生成创作
2020/09/14
15K0
PyTorch多GPU并行训练方法及问题整理
[源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer和Join操作
因为前文已经围绕Reducer相关的各种成员变量做了相关分析,所以本文开始做动态逻辑分析,目的是:把前面几篇文章串联起来,为后面分析前向传播和反向传播设定基础。
罗西的思考
2021/11/29
1.5K0
大模型的实践应用-大语言模型的分布式训练并行策略,数据并行原理
大家好,我是微学AI,今天给大家介绍一下大模型的实践应用14-大语言模型的分布式训练并行策略,数据并行原理。大语言模型的分布式训练并行策略主要通过数据并行来实现。数据并行是指将训练数据划分为多个小批量, 然后将这些小批量分配给不同的计算设备进行并行处理。通过数据并行的并行策略,每个计算设备都可以独立地计算小批量数据的梯度,并将结果进行聚合,从而实现模型的并行训练。这种分布式训练策略可以加速大语言模型的训练过程,并提高模型的性能和效果。
微学AI
2025/05/29
1420
大模型的实践应用-大语言模型的分布式训练并行策略,数据并行原理
pytorch使用DistributedDataParallel进行多卡加速训练
在上文我们介绍了如何使用多线程在数据模块中进行模型训练加速,本文我们主要介绍在pytorch中如何使用DistributedDataParallel,torch.multiprocessing等模块来进行多卡并行处理提升模块训练速度。
languageX
2021/11/02
3.2K0
PyTorch常见的坑汇总
最近刚开始用pytorch不久,陆陆续续踩了不少坑,记录一下,个人感觉应该都是一些很容易遇到的一些坑,也在此比较感谢帮我排坑的小伙伴,持续更新,也祝愿自己遇到的坑越来越少。
Datawhale
2019/09/24
2K0
PyTorch常见的坑汇总
PyTorch分布式训练简介
分布式训练已经成为如今训练深度学习模型的一个必备工具,但pytorch默认使用单个GPU进行训练,如果想用使用多个GPU乃至多个含有多块GPU的节点进行分布式训练的时候,需要在代码当中进行修改,这里总结一下几种使用pytorch进行分布式训练的方式。
狼啸风云
2020/02/13
5K0
【Ubuntu】分布式训练/pycharm远程开发
摸到了组里配备的多卡服务器,对于一个习惯单卡环境的穷学生来说,就像是鸟枪换炮,可惜这炮一时还不会使用,因此就有了此番学习。
zstar
2022/10/08
2K0
【Ubuntu】分布式训练/pycharm远程开发
[源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化
前文我们对DDP的一些支撑模块已经做了介绍,这为本文做了必要的铺垫,本文就开始介绍Python世界代码和C++世界的初始化部分。下文介绍C++世界的核心代码。
罗西的思考
2021/11/24
1.5K0
[源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化
[源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架
在前面的文章之中,我们已经学习了PyTorch 分布式的基本模块,接下来我们通过几篇文章来看看如何把这些模块应用到实践之中,顺便把PyTorch分布式逻辑整体梳理一下。本文介绍如何把DDP和RPC framework结合起来。
罗西的思考
2021/12/17
6200
[源码解析] PyTorch 分布式(17) --- 结合DDP和分布式 RPC 框架
PyTorch分布式训练进阶:这些细节你都注意到了吗?
导语 | pytorch作为目前主流的深度学习训练框架之一,可以说是每个算法同学工作中的必备技能。此外,pytorch提供了极其方便的API用来进行分布式训练,由于最近做的工作涉及到一些分布式训练的细节,在使用中发现一些之前完全不会care的点,现记录于此,希望对有需求的同学有所帮助。 本文包含: pytorch分布式训练的工作原理介绍。 一些大家平时使用时可能不太注意的点,这些点并不会导致直观的bug或者训练中断,但可能会导致训练结果的偏差以及效率的降低。 同时结合某些场景,介绍更为细粒度(group)的
腾讯云开发者
2022/05/13
1.1K0
PyTorch分布式训练进阶:这些细节你都注意到了吗?
万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析
在人工智能技术高速发展的当下,AI 大模型凭借其强大的学习能力和泛化能力,已成为推动各领域变革的核心力量。深度学习作为 AI 大模型的技术基石,通过构建多层神经网络实现复杂模式识别;分布式计算解决了大模型训练所需的海量算力问题;自动化技术则大幅提升了模型开发、部署及应用的效率。三者深度融合,正在重塑整个 AI 生态。
羑悻的小杀马特.
2025/05/25
1290
万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析
[源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
本文是 PyTorch 分布式系列的第五篇,以几篇官方文档的翻译为基础,加入了自己的一些思考,带领大家进入DistributedDataParallel,在后续会用5~6篇左右做深入分析。
罗西的思考
2021/11/18
2.3K0
[源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
Pytorch 分布式训练
即进程组。默认情况下,只有一个组,一个 job 即为一个组,也即一个 world。
肉松
2020/09/07
2.5K0
Pytorch 分布式训练
Pytorch多GPU训练
torch.nn.DataParallel()这个主要适用于单机多卡。个人一般比较喜欢在程序开始前,import包之后使用os.environ['CUDA_VISIBLE_DEVICES']来优先设定好GPU。例如要使用物理上第0,3号GPU只要在程序中设定如下:
烤粽子
2021/07/07
2.5K0
推荐阅读
相关推荐
Pytorch 多卡并行训练
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档