wgzhao / Addax

Addax is a versatile open-source ETL tool that can seamlessly transfer data between various RDBMS and NoSQL databases, making it an ideal solution for data migration.

Home Page:https://wgzhao.github.io/Addax/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Bug]: java往数据库中直接存为clob字段时,oracle会报ORA-01704问题:字符串文字过长。

weihebu opened this issue · comments

What happened?

作者你好,就是我在使用addax同步oralce中的数据时,当遇到表中有clob字段并且使用update模式时,clob数据过大就会报连接重置,我觉得可不可以按照以下链接的方式处理一下clob字段,大约每三千个字符长度进行一次截断,然后用to_clob('字符1') || to_clob('字符2') || to_clob('字符3') || to_clob('字符4')拼接回来?附上链接。
https://juejin.cn/post/7019677362035884063

Version

4.1.4

OS Type

centos

Java JDK Version

Oracle JDK 1.8.0

Relevant log output

No response

请贴出完整的运行日志

作者你好,已经以附件的形式上传了日志,其中字段“TRIGGER_COND” 是clob字段,长度超过四千的话,就会报这个错误。

已尝试解决这个问题,其实 java.sql.SQLRecoverableException: Closed Connection 这个报错,还不完全是 clob 的问题,它还和 Java 选择的随机发生器有一定的关系。

你可以尝试下载
addax-rdbms-4.1.5-SNAPSHOT.zip
,修改 zip 后缀为 jar,然后替换 $ADDAX_HOME/lib 下的addax-rdbms-<version>.jar 文件。

好的,等假期结束,我这边替换上去试下。此外Java 选择的随机发生器是指什么,没看懂。

我这边测试了一下,发现只有一条数据的情况下没有报错,但是多条还是会有问题,新的日志附在下面。
datax_blob2.txt

作者你好,就这个问题能否看下,是否好解决?

我这两天再测试看看

下载此附件
oraclewriter-4.1.6-SNAPSHOT.jar.zip

解压后,放置在 $ADDAX_HOME/plugin/writer/oraclewriter/ 目录下,并删除之前对应的 jar 文件再试试。

我本地在 Oracle 11.2.0.4 版本下测试通过。测试的配置文件如下:

{
  "job": {
    "content": [
      {
        "writer": {
          "name": "oraclewriter",
          "parameter": {
            "column": [
              "DI_RULE_ID","TRIGGER_COND"
            ],
        "username":"oracle",
        "password":"xxxxxxx",
            "connection": [
              {
                "jdbcUrl": "jdbc:oracle:thin:@oracle-server:1521/ini"
                ,
                "table": [
                  "stg01.addax_test"
                ]
          }
            ],
        "writeMode": "update (DI_RULE_ID)"
          }
        },
        "reader": {
          "name": "datareader",
          "parameter": {
            "column": [
              {
                "value": "100,120",
                "rule":"incr",
                "type": "long"
              },
              {
                "value": "100,5000",
                "rule":"random",
                "type": "string"
              }
            ],
            "sliceRecordCount": 10
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "bytes": -1,
        "channel": 1
      }
    }
  }
}