Oracle国产化改造迁移时的问题: Number data type中的 invalid number
当迁移Oracle数据库到其他数据库系统时,你可能会遇到一个棘手的问题:在Oracle表中存在无效的数字数据,导致在目标数据库(比如PostgreSQL系列)导入时报错。这些错误可能表现为类似“invalid input syntax for type numeric: ‘xxx’”的提示信息。最近,在将Oracle国产化改造项目迁移到商业发行的MogDB时,我也遇到了这个问题。看来Oracle的容错率太高了,不会像其他数据库那样严格检查数据的有效性。因此,我们需要一种方法来找出并修正这些错误数据。在本文中,我将分享一种解决这个问题的方法。
MTK工具入库错误
code: 22p02 msg: invalid input syntax for type numeric:“0.00000023H4” where: copy TAB123, column COL123: “0.00000023H4”
data: 1 xxx xx xx 0.00000023H4 …
MTK( Database Migration Toolkit)工具是导入Mogdb的异构数据迁移工具,错误提示很明确TAB123表COL123字段的”0.00000023H4″值是无效数字,并提示了该行记录,接下来我们去源库确认。
Oracle源库确认数据
— 注 环境oracle 19c ,报错数据列导出到临时库演示。
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> @init SQL> @desc test1 Name Null? Type ------------------------------- -------- ---------------------------- 1 ID NUMBER(38) 2 V NUMBER SQL> select * from test1; ID V ---------- ---------- 1 1 2 3 SQL> col dv for a40 SQL> select id,v,dump(v,1016) dv from test1; ID V DV ---------- ---------- ---------------------------------------- 1 1 Typ=2 Len=2: c1,2 2 NULL 3 Typ=2 Len=3: bd,18,f5