本章节介绍studio多发比对的整体步骤及相关功能展示。

10.6.1. 安装前准备

  1. 从官网下载最新的lightdb-studio包: 下载使用-客户端软件-LightDB-Studio-windows

解压 LightDB1.0-studio-Vxxxxxx-xx-xxx-win-x86_64.zip 到windows自定义目录中

  1. 从官网下载对应版本的统一sql比对服务包: 下载使用-LightDB中间件-多发比对-比对服务下载

解压 LightDB1.0-comparison-Vxxxxxx-xx-xxx.zip 到windows某个目录

  1. 从官网下载最新的统一sql包,如当前最新版本: 下载使用-LightDB中间件-统一SQL-下载(动态库)

解压 LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip 到windows某个目录

10.6.2. 配置多发目标数据库

  1. 在 lightdb_studio 解压目录中新增多发目标库配置文件 LightDB1.0-studio-Vxxxxxx-xx-xxx-win-x86_64/lightdb_studio/config/jrescloud.properties

  2. 将目标数据库的多发数据源配置复制到 jrescloud.properties,并修改对应的连接信息,将IP、PORT、DATABASE、USERNAME、PASSWORD修改为目标库的IP地址、服务端口、连接数据库、连接用户名、连接密码

    # 目标库为 lightdb_oracle 时,打开并修改以下连接信息
    multiplex.datasource.lightdb_oracle.url=jdbc:postgresql://IP:PORT/DATABASE?sourceDialect=oracle&targetDialect=lightdb_oracle&options=-c%20search_path=public
    multiplex.datasource.lightdb_oracle.username=USERNAME
    multiplex.datasource.lightdb_oracle.password=PASSWORD
    # 目标库为 gaussdb_oracle 时,打开并修改以下连接信息
    multiplex.datasource.gaussdb_oracle.url=jdbc:opengauss://IP:PORT/DATABASE?sourceDialect=oracle&targetDialect=gaussdb_oracle&options=-c%20search_path=public
    multiplex.datasource.gaussdb_oracle.username=USERNAME
    multiplex.datasource.gaussdb_oracle.password=PASSWORD
    # 目标库为 ocean_base_oracle 时,打开并修改以下连接信息
    multiplex.datasource.ocean_base_oracle.url=jdbc:oceanbase://IP:PORT/DATABASE?sourceDialect=oracle&targetDialect=ocean_base_oracle
    multiplex.datasource.ocean_base_oracle.username=USERNAME
    multiplex.datasource.ocean_base_oracle.password=PASSWORD
    # 目标库为达梦数据库时,打开并修改以下连接信息
    multiplex.datasource.dm.url=jdbc:dm://IP:PORT/DATABASE?sourceDialect=oracle&targetDialect=dm
    multiplex.datasource.dm.username=USERNAME
    multiplex.datasource.dm.password=PASSWORD
    

10.6.3. 配置多发消息代理

  1. 修改LightDB1.0-studio-Vxxxxxx-xx-xxx-win-x86_64/lightdb_studio/config 目录下jrescloud.properties文件(多发配置项multi开头)

  2. 修改以下配置属性

multi.run.what=2                                        //0:不执行自动化和多发 1:执行自动化测试 2:执行多发(关联多发的源库(oracle或者mysql)的jdbcUrl中查询参数mode=MULTIPLEX) 3:执行自动化+多发(关联多发的源库(oracle或者mysql)的jdbcUrl中查询参数mode=MULTIPLEX)
multi.sendCompareService=1                               //是否发送到比对服务(总开关),默认0不发送到比对服务,取值范围[0,1]
multi.pulsarServiceUrl=pulsar://${IP}:${PORT}            //Pulsar服务端地址,格式为:pulsar://<ip>:<port> 样例数据:pulsar://10.20.47.203:6650
multi.topicName=persistent://public/default/${TOPIC}     //Pulsar的持久化主题,主题格式:persistent://<tenant>/<namespace>/<topic>,样例数据为:persistent://public/default/recordMonitorJingji
multi.subscriptionName=${SUBSCRIPTION}                   //在Pulsar中,订阅(Subscription)是用于消费主题消息的标识符。订阅名称是用来标识不同消费者或消费组在订阅相同主题时的唯一标识。合法字符串即可,比如jingjiTest

10.6.4. 指定统一SQL动态库及多发配置文件

  1. 下载windows版统一SQL 下载使用-LightDB中间件-统一SQL-windows版(仅用于开发) 并解压到自定义目录

  2. 修改 LightDB1.0-studio-Vxxxxxx-xx-xxx-win-x86_64/lightdb_studio/lightdb_studio.ini 文件,在 -Dfile.encoding=UTF-8 行下增加以下内容:

    -Dspring.config.location=【Studio解压目录/lightdb_studio/config/jrescloud.properties】
    -Dunisql.lib.full-path=【unisql-for-windows.zip解压后,其中unisql.windows.dll的全路径】
    
  3. 重启 lightdb_studio

10.6.5. 配置多发驱动管理器

  1. 新增目录并拷贝多发依赖

    1. 新增目录 LightDB1.0-studio-Vxxxxxx-xx-xxx-win-x86_64/lightdb_studio/lib

    2. 将 LightDB1.0-comparison-Vxxxxxx-xx-xxx/unisql-compare-client-fat-xx.xx.xx.jar 文件复制到该目录中。

    3. 将 LightDB1.0-unisql-Vxxxxxx-xx-xxx/sql-convert-runtime-fat-xx.xx.xx.jar 文件复制到该目录中。

  2. 点击studio上方导航栏中的 数据库 -> 驱动管理器 -> 新建;

  3. 在 创建新驱动 的第一个tab页面 设置:

    • 驱动名称:为便于区分可根据的操作源数据库来填写,例如【oracle多发】

    • 驱动类型:选择默认的 Generic 。

    • 类名: com.hundsun.lightdb.unisql.proxy.Driver

    • URL模板:jdbc:unisql:oracle:thin:@//{host}[:{port}]/[{database}]?mode=MULTIPLEX&sourceDialect=oracle&targetDialect=oracle

    • 默认端口:1521

    • 默认数据库:orcl

    • 默认用户:按需配置

../_images/studio_multi_add_driver.png
  1. 在 创建新驱动,选择第二个tab页面

    1. 点击 添加文件夹,将上述新增的目录添加进来

      ../_images/studio_config_drivers_add_dir.png
    2. 点击 添加工件,在 依赖声明 中将多发的目标库驱动添加进来,一次添加一个驱动

      ../_images/studio_config_drivers_add_lib.png
    <!--以下为oracle驱动-->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>19.14.0.0</version>
    </dependency>
    
    <!--以下为lightdb驱动-->
    <dependency>
        <groupId>com.hundsun.lightdb</groupId>
        <artifactId>ltjdbc</artifactId>
        <version>42.2.25-24.2.4</version>
    </dependency>
    
    <!--以下为gaussdb_oracle驱动-->
    <dependency>
        <groupId>com.huawei.opengauss.jdbc</groupId>
        <artifactId>gaussdbDriver</artifactId>
        <version>3.0.0-htrunk21</version>
    </dependency>
    
     <!--以下为ocean_base_oracle驱动-->
    <dependency>
        <groupId>com.oceanbase</groupId>
        <artifactId>oceanbase-client</artifactId>
        <version>2.4.3</version>
    </dependency>
    
     <!--以下为达梦数据库驱动-->
    <dependency>
        <groupId>com.dameng</groupId>
        <artifactId>DmJdbcDriver18</artifactId>
        <version>8.1.3.140</version>
    </dependency>
    
    1. 点击 下载/更新 下载驱动文件,下载完成后点击 确定 ,至此统一SQL的驱动就添加好了。

10.6.6. 创建多发连接

  1. 通过刚才新增的多发驱动建立连接,需配置源端的连接信息,之后可以通过测试连接来验证正确性

../_images/connect_1.png ../_images/connect_2.png

10.6.7. 测试多发功能

通过lightdb-studio直接执行sql语句,并通过结果比对页面实时检查多发操作结果的准确性。

环境初始化

  1. 创建数据库表:CREATE TABLE foo (city_id NUMBER,nation VARCHAR2(100),city_name VARCHAR2(100),city_sort NUMBER);

../_images/studio_create_table_2024-10-15_20-02-40.jpg
  1. 检查源库和多发目标库是否都创建表成功;

测试DML多发

  1. INSERT INTO foo (city_id, nation, city_name, city_sort) values(12,’china’,’beijing’,12);

  2. INSERT INTO foo (city_id, nation, city_name, city_sort) values(14,’USA’,’Jorgen’,14);

  3. 查询页面:http://IP:17334/em/workbench-tab.html,效果如下:

../_images/studio_multi_insert_result_2024-10-11.jpg
  1. 多字段表展示样例

../_images/compare_records_success_2024-07-19_16-34-34.jpg

测试DQL多发

  1. SELECT city_id,city_name FROM foo WHERE city_id=12;

../_images/studio_multi_select_result_2024-10-11.jpg
关键字配置

当配置的关键字和比对数据中的列名一样时,可以将关键字和值作为条件筛选比对结果,多个关键字查询用&连接。

../_images/add_keyword.png ../_images/compare_records_search_by_keyword.png
钉钉消息

当配置钉钉机器人后,数据比对失败,会给钉钉机器人发送消息,如下图:

../_images/dingding_message.png

环境清理

  1. DROP TABLE foo;

  2. 检查源库和多发目标库是否都已删除该表

10.6.8. 查看比对报告

  1. 登录到搭建的比对服务中 http://IP:17334/em/workbench-tab.html,初始化登录用户名和密码为 system/hs123456

  2. 从 lightdb_studio 日志中获取traceId,日志位于:系统用户目录AppDataRoamingLightDbStudioDataworkspace6.metadatadbeaver-debug.log

  3. 通过 traceId 查看比对报告

../_images/traceId%E6%9F%A5%E7%9C%8B%E6%AF%94%E5%AF%B9%E6%8A%A5%E5%91%8A.png
小提示

关于模式的设置,Oracle的数据库,默认情况下,用户名与模式名称相同。多发功能中多发到PostgreSQL系列相关数据库, 需要在PostgreSQL系列相关数据库下创建相同名称的模式。因为Oracle的模式名称一般是大写, 所以PostgreSQL系列相关数据库创建相同大写模式名称时,模式名称要用英文双引号包裹。

10.6.9. 全量同步比对失败的表

在比对报告中,可点击 全表数据同步 将对比失败的表进行表数据的全量同步,当前版本只支持从 ORACLE 同步表数据到 OCEAN_BASE_ORACLE ,只支持同步一个表。详细操作步骤如下:

../_images/%E5%85%A8%E9%87%8F%E5%90%8C%E6%AD%A5%E6%AF%94%E5%AF%B9%E5%A4%B1%E8%B4%A5%E7%9A%84%E8%A1%A8.png ../_images/%E6%88%90%E5%8A%9F%E5%85%A8%E9%87%8F%E5%90%8C%E6%AD%A5%E6%AF%94%E5%AF%B9%E5%A4%B1%E8%B4%A5%E7%9A%84%E8%A1%A8.png
  1. LightDB 官网下载迁移工具 LightDB-ETL

  2. 將下载的 LightDB-ETL 里的jar包(如 lightdb-etl-24.3.jar )的绝对路径配置在环境变量 LIGHTDB_ETL_JAR

  3. 迁移日志文件目录为 {比对服务安装目录的log}/lightdb-etl/{当前时间_traceId_计数} ,可查看详细的迁移日志。

  4. 前端页面会展示基本全量同步结果。

问题排查

../_images/%E5%85%A8%E9%87%8F%E5%90%8C%E6%AD%A5%E6%AF%94%E5%AF%B9%E5%A4%B1%E8%B4%A5%E7%9A%84%E8%A1%A8%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF.png
  1. 可通过查看 LightDB-ETL 的日志文件 lightdb-etl-error.log 查看更加详细的报错内容。

  2. 日志路径为 {比对服务安装目录的log}/lightdb-etl/{当前时间_traceId_计数}

  3. lightdb-etl.log :数据同步的总日志,可查看具体迁移的表、迁移数据等。

  4. lightdb-etl-error.log :数据同步报错日志汇总。