暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于impdp导数据时ORA-06502错误代码的分析

IT那活儿 2022-02-28
3823

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!


日常运维工作中经常需要对数据做备份或倒换,其中也会经常性遇到一些问题。

翻看以前的一些问题记录,本次就对从高版本导数据至低版本时遇到的ORA-06502错误做一个分析记录。

01

问题描述


使用db_link从19c impdp导入数据到12c时报错:
ORA-06502:PL/SQL:numeric or value error(数字或值错误)
1.1 操作:通过db_link impdp导入;
1.2 版本:19c -> 12c;
1.3 日志信息:

02

报错分析


2.1 从报错提示上看猜测是表分区名过长,但因两边都是生产库,不好更改表名和分区名。
因为远端19c数据库中表分区名太长超过30,在local端12.1只能先创建表结构后(创建表结构时,调整分区名长度)进行impdp。
在impdp时候按分区导入数据时候进行分区映射。
2.2 通过select dump(value,16) from v$spparameter where name='compatible' 检查spfile参数文件。
2.3 尝试从源头寻找问题,而考虑使用db_link导数据可能会出现如下问题:
When both the NETWORK_LINK and the TABLES parameters are used, then only whole tables can be imported (not partitions of tables). Trying to import a partition of a table over a database link will fail with ORA-39203 (Partition selection is not supported over a network link) or in older releases with ORA-14100 (partition extended table name cannot refer to a remote object). The only exception to this is if TRANSPORTABLE=ALWAYS is also specified, in which case single or multiple partitions of a specified table can be imported. See also section 8.13. "ORA-39203 (Partition selection is not supported over a network link)" below.
db_link导入时不能指定到分区级别,NETWORK_LINK 和TABLES 同时指定时,只能导入全部表,可以把TABLES参数后面的分区去掉,直接指定表。
2.4 由于生产环境要求,只能按分区来导入,尝试处理如下:
  • 在impdp导入之前开启如下events:


alter system set events 'sql_trace {process: pname = dw | process: pname = dm} level=12';alter system set events '6502 trace name errorstack level 10';


  • 执行impdp命令,并追加TRACE=1ff0300 METRICS=Y LOGTIME=ALL参数,检查相关日志。

2.5 操作复现,尝试寻找问题根源:
  • 尝试一:不使用DB LINK,直接在源库导出对应报错对象的PUMP文件,之后在19C环境直接导入12C的导出的PUMP文件,看问题是否依然存在;
  • 尝试二:如果尝试一中问题依然存在,导入时追加EXCLUDE=STATISTICS,看问题是否依然存在;
  • 尝试三:除了有问题的表和分区,其他的分区表,使用相同的impdp 语法,是否能成功导入。
2.6 在经过以上尝试后的根据错误日志确定是由于名字长度引起:
Oracle版本从12.2之后 对象名字增加为128个字符,而12.2之前是30个字符,目前该库版本低于12.2。
2.7 虽然定位了问题,但由于无法变更生产库对象,尝试寻找该bug是否有对应的补丁包。
根据分析,19c db_link导入数据至 12c时由于双方版本不一致会触发bug,可以尝试打补丁30522341解决该bug。

03

问题总结


3.1 impdp导入时针对该ORA-00报错,如果导入对象是非系统数据,则可以对该数据字段长度进行更改。
切记:在没有客户授权的情况下绝对不能对数据做变更操作的。
3.2 通过补丁包30522341升级来修复该bug。

end


本文作者:冯俊鸿

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论