疑难杂症,盘点dataxweb数据迁移中遇到的坑(三)

文章讲述了在使用DataX进行数据传输时遇到脏数据问题,特别是timestamp字段异常导致的,以及如何通过调整时间格式或解决Oracle临时表空间不足问题来修复。作者分享了针对特定错误代码的排查和解决策略。

问题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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值