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.
https://wgzhao.github.io/Addax/
Apache License 2.0
1.16k stars 298 forks source link

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

Closed weihebu closed 1 month ago

weihebu commented 4 months ago

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

wgzhao commented 4 months ago

请贴出完整的运行日志

weihebu commented 4 months ago

datax_blob.txt

weihebu commented 4 months ago

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

wgzhao commented 4 months ago

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

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

weihebu commented 4 months ago

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

weihebu commented 4 months ago

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

weihebu commented 1 month ago

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

wgzhao commented 1 month ago

我这两天再测试看看

wgzhao commented 1 month ago

下载此附件 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
      }
    }
  }
}