开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

大佬们,flinkcdc读取oracle时,想把sid改成servers_name 应该修改源码?

大佬们,flinkcdc读取oracle时,想把sid改成servers_name 应该修改源码哪里?

展开
收起
真的很搞笑 2023-06-18 14:37:26 210 0
8 条回答
写回答
取消 提交回答
  • 在使用Flink CDC读取Oracle时,如果您想将SID改为服务器名称,您需要修改Flink CDC的源代码。具体来说,您需要修改以下文件:

    1.Flink CDC的Oracle JDBC驱动程序:您需要修改Oracle JDBC驱动程序中的代码,以便将SID替换为服务器名称。
    2.Flink CDC的Oracle JDBC连接器:您需要修改Oracle JDBC连接器中的代码,以便将SID替换为服务器名称。
    3.Flink CDC的Oracle日志解析器:您需要修改Oracle日志解析器中的代码,以便将SID替换为服务器名称。
    请注意,修改Flink CDC的源代码可能会影响Flink CDC的稳定性和性能。如果您不熟悉Flink CDC的源代码,建议您咨询Flink CDC的开发人员或使用Flink CDC的预置配置

    2023-09-11 10:00:51
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    找到 Flink CDC 源代码中与 Oracle 相关的部分。通常,这些代码位于 io.debezium.relational.RelationalDatabaseSource 类或类似的类中。
    在代码中找到与 SID 相关的部分。这可能是一个字符串常量或变量,用于表示 SID。
    将 SID 的值更改为 servers_name。确保修改后的代码与你的需求一致。
    编译和打包修改后的代码,以生成新的 Flink CDC 二进制文件。
    image.png

    将新生成的 Flink CDC 二进制文件替换到你的 Flink 环境中。
    重新启动 Flink 任务,以使修改生效。
    请注意,修改 Flink CDC 的源代码可能会对未来的升级和维护造成影响。建议在进行任何修改之前备份原始代码,并在测试环境中验证修改的正确性。

    另外,如果你只是想在 Flink 任务中使用 servers_name 作为连接的标识符而不是 SID,你可以尝试在 Flink 的连接配置中设置相应的参数,而不是直接修改源代码。具体设置方法可以参考 Flink 和 Oracle 的官方文档或相关的技术文档:https://help.aliyun.com/zh/flink/developer-reference/oceanbase-connector?spm=a2c4g.11174283.0.i6
    image.png

    2023-08-25 16:54:17
    赞同 展开评论 打赏
  • 在Flink CDC中,要将Oracle的SID更改为server_name,需要修改Flink CDC的源代码。具体来说,你需要修改flink-cdc-connectors/flink-connector-oracle-cdc模块中的代码。

    1、打开flink-connector-oracle-cdc模块的源代码。

    2、寻找OracleSource.java文件,该文件位于src/main/java/org/apache/flink/connector/oracle/cdc中。

    3、在OracleSource.java文件中,你需要找到OracleSourceBuilder类的build()方法。

    4、在build()方法中,你需要找到OracleCdcConsumer的构造函数。

    5、在构造函数中,你可以看到使用OracleCdcSourceFunction的方式来创建一个source function,它接受OracleCdcSourceContext作为参数。

    6、在OracleCdcSourceFunction中,你需要找到createConnectorConfig()方法。

    7、在createConnectorConfig()方法中,你可以看到有一个createDefaultConfig()方法,该方法返回一个默认的OracleConnectorConfig对象。

    8、在createDefaultConfig()方法中,你需要找到以下代码:

    .withSid(...)
    

    9、将.withSid(...)替换为.withServerName(...),然后传入你想要的server_name作为参数,例如:

    .withServerName("your_server_name")
    

    10、保存并重新编译源代码。

    2023-08-22 17:19:37
    赞同 1 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,可以在Flink CDC源码中的 OracleSource.java 文件中修改连接信息。具体来说,在连接Oracle数据库的地方可以修改
    image.png

    jdbc:oracle:thin:@//${host}:${port}/${sid}这个连接字符串为jdbc:oracle:thin:@${host}:${port}/${service_name},其中 ${service_name} 是 Oracle 数据库的服务名。修改后的代码类似这样:

    image.png

    Properties props = new Properties();
    props.setProperty("user", username);
    props.setProperty("password", password);
    // 修改这里的连接字符串
    props.setProperty("url", "jdbc:oracle:thin:@" + host + ":" + port + "/" + service_name);
    
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
    dataSource.setUrl(props.getProperty("url"));
    dataSource.setUsername(props.getProperty("user"));
    dataSource.setPassword(props.getProperty("password"));
    dataSource.setConnectionProperties(props);
    

    修改完代码后重新编译并部署即可。

    2023-08-21 11:00:48
    赞同 展开评论 打赏
  • 您好,Flink CDC 读取 Oracle 时,想要将 SID 改为服务器名称 servers_name,需要修改的源码位置主要集中在:

    1. io.debezium.connector.oracle.OracleConnector 的 start() 方法
      此方法中构建 JDBC URL 时默认使用 SID 作为 DB 名称。可以修改这里,允许从配置中读取 servers_name。
    2. io.debezium.connector.oracle.OracleConnectionFactory
      其 createConnection() 方法中也构建了 JDBC URL,需要一并修改。
    3. io.debezium.jdbc.JdbcConfiguration
      JdbcConfiguration 中定义了数据库 URL 的模板,也可在这里对应修改。
    4. io.debezium.relational.history.DatabaseHistory
      获取数据库 History 信息时也包含 SID,需要将其改为 configurable 配置。
    5. io.debezium.connector.oracle.OracleSchema
      Schema 获取过程中也要避免硬编码 SID。
      主要是搜索代码中出现数据库 URL 的相关位置,将 SID 部分改为可配置,即可实现您的需求。
    2023-08-16 14:46:17
    赞同 展开评论 打赏
  • 如果您想将 Flink CDC 中读取 Oracle 数据库时使用的 SID 改为 SERVICE_NAME,可以通过修改 Flink CDC 的配置文件来实现。具体来说,需要在配置文件中设置 jdbc.url 参数,将其中的 SID 替换为 SERVICE_NAME。

    下面是一个示例配置文件,其中 jdbc.url 参数指定了 Oracle 数据库的 SERVICE_NAME:

    # Flink CDC 配置文件
    
    # 数据源配置
    flinkcdc.sources.oracle-source.type: oracle
    flinkcdc.sources.oracle-source.jdbc.driver: oracle.jdbc.driver.OracleDriver
    flinkcdc.sources.oracle-source.jdbc.url: jdbc:oracle:thin:@//localhost:1521/service_name
    flinkcdc.sources.oracle-source.jdbc.username: myusername
    flinkcdc.sources.oracle-source.jdbc.password: mypassword
    
    # 输出配置
    flinkcdc.sinks.print-sink.type: print
    

    需要注意的是,上述配置文件仅供参考,具体的配置参数取决于您所使用的 Oracle 数据库版本和配置。在实际使用中,需要根据实际情况进行相应的调整和配置。

    如果您希望修改 Flink CDC 的源代码,以支持通过 SERVICE_NAME 连接 Oracle 数据库,那么需要修改 flink-cdc-connectors/flink-cdc-oracle/src/main/java/org/apache/flink/cdc/connectors/oracle/OracleSource.java 文件中的相应代码。具体来说,需要修改 getConnectionUrl() 方法,将其中的 SID 替换为 SERVICE_NAME。示例如下:

    private String getConnectionUrl() {
        StringBuilder sb = new StringBuilder();
        sb.append("jdbc:oracle:thin:@//");
        sb.append(config.hostname);
        sb.append(":");
        sb.append(config.port);
        sb.append("/");
        sb.append(config.serviceName); // 将 SID 替换为 SERVICE_NAME
        return sb.toString();
    }
    

    修改源代码可能会对系统稳定性和兼容性产生影响,建议谨慎操作,并在修改前备份原有代码。

    2023-08-15 14:36:36
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    是的,如果想让Flink CDC从Oraclebinlog日志中获取server_name而不是sid,需要修改Flink CDC源码。

    具体修改位置如下:

    对象org.apache.flink.connector.base.source.reader.log.debezium.DebeziumLogReader

    方法extractServerName根据binlog事件获取 Sid 或ServerName

    从 BinaryLogClient获取ServerName:

    java
    Copy
    String serverName = client.getServerName();
    object方法中传递ServerName:
    java
    Copy
    return new ServerName(serverName);
    FlinkCDCSource.createSourceReader()传入ServerName:
    java
    Copy
    .assignServerName(serverName)
    OracleRowDeserializationSchema序列化时使用:
    java
    Copy
    public ServerName serverName;
    测试binarylog解析能正确获取ServerName
    可能还需要修改元数据映射逻辑同步ServerName。

    主要目的就是从binlog事件中取ServerName代替原有的Sid字段。需要重写相关解析逻辑。

    2023-08-14 15:44:45
    赞同 展开评论 打赏
  • 如果您想在 Flink CDC 中将 Oracle 数据库的 SID 改为 server_name,您需要修改 Flink CDC 的源代码。具体而言,您需要修改以下两个文件:

    1. oracle-cdc-connector 模块下的 OracleSplitReader.java 文件:在该文件中搜索 jdbc:oracle:thin:@,找到连接字符串的位置。将连接字符串中的 SID 替换为 server_name。
      image.png

    2. flink-connector-oracle-cdc 模块下的 OracleCdcSource.java 文件:在该文件中搜索 jdbc:oracle:thin:@,找到连接字符串的位置。同样地,将连接字符串中的 SID 替换为 server_name。
      image.png

    2023-08-14 10:28:19
    赞同 展开评论 打赏
滑动查看更多

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像