问题1
1.2023-11-30 14:24:11 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[Framework-14], Description:[DataX传输脏数据超过用户预期,该错误通常是由于源端数据存在较多业务脏数据导致,请仔细检查DataX汇报的脏数据日志信息, 或者您可以适当调大脏数据阈值 .]. - 脏数据条数检查不通过,限制是[0]条,但实际上捕获了[5]条.
解决过程
第一反应看到Datax传输数据遇到脏数据,会是像我上篇文章提到的,陈年老数据中存在chr(0)字符,理所当然的用REPLACE (字段A, chr(0), '')去替换掉,本以为一帆风顺,结果再次打脸。并不是chr(0)字符的问题,之前也遇到过主键唯一的问题,引发的脏数据,但是这显然不是。继续分析,直到把那5条脏数据都找出来的时候发现,有一个共同的特性,最后整改时间这个字段都显示5378-11-30 00:00:00.000000,照理来说5378年比较大,数据奇葩不会存在什么大问题,但是时间字段如果使用datetime,那么时间支持的范围很宽1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,没有什么问题,但是该字段用的是timestamp类型,timestamp首先分时区,另外timestamp可表示范围:1970-01-01 00:00:00~2038-01-09 03:14:07。
方案
这5条奇葩数据要么放弃,要么把时间改为正常时间。
问题2
com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.]具体错误信息为:java.sql.SQLException: ORA-01652: 无法通过 128 (在表空间 AUDTEMP 中) 扩展 temp 段
解决过程
之前迁移数据的时候,并没有遇到这个问题,并且数据源作为只是抽取方,按理说不应该存在这个问题。这种问题一般有两种原因:一是不能自动扩展,二是临时表空间空间太小
首先查询
select c.tablespace_name "临时表空间名",
round(c.bytes / 1024 / 1024 / 1024, 2) "临时表空间大小(G)",
round((c.bytes - d.bytes_used) / 1024 / 1024 / 1024, 2) "临时表空间剩余大小(G)",
round(d.bytes_used / 1024 / 1024 / 1024, 2) "临时表空间使用大小(G)",
round(d.bytes_used * 100 / c.bytes, 4) || '%' "使用率 %"
from (select tablespace_name, sum(bytes) bytes
from dba_temp_files
GROUP by tablespace_name) c,
(select tablespace_name, sum(bytes_cached) bytes_used
from v$temp_extent_pool
GROUP by tablespace_name) d
where c.tablespace_name = d.tablespace_name;
发现AUDTEMP临时表空间使用率99.98%,可以考虑首先释放改临时表空间
alter tablespace AUDTEMP shrink space;
表空间是释放了,但是数据迁移执行该查询sql的时候,再次提示临时表空间不足。那就只能考虑增加数据文件
ALTER TABLESPACE TESTTBS
ADD tempfile‘+DG1/ora/datafile/testtbs01.ora’ SIZE 500M
AUTOEXTEND ON
NEXT 50M
MAXSIZE 10G;
增加了一个500M的数据文件,并且可以自动扩展到10G,每次扩展50M。
最终问题解决。
方案
给临时表空间增加数据文件,sql如下
ALTER TABLESPACE TESTTBS
ADD tempfile‘+DG1/ora/datafile/testtbs01.ora’ SIZE 500M
AUTOEXTEND ON
NEXT 50M
MAXSIZE 10G;
文章讲述了在使用DataX进行数据传输时遇到脏数据问题,特别是timestamp字段异常导致的,以及如何通过调整时间格式或解决Oracle临时表空间不足问题来修复。作者分享了针对特定错误代码的排查和解决策略。
1635

被折叠的 条评论
为什么被折叠?



