2.7. DBeaver集成统一SQL实现多发功能

统一SQL支持集成到DBeaver中,可实现执行一次SQL多发到不同类型的数据库,例如连接Oracle数据库,在其tab页执行一次一条Oracle SQL,源Oracle数据库执行成功, 同时通过配置可以在其他目标数据库上执行成功,集成方法在本节进行说明。

2.7.1. 下载DBeaver社区版

访问 DBeaver Community 下载最新版。

2.7.2. 配置多发目标数据库

  1. 在任意文件夹下新建一个properties的配置文件,例如:D:\unisql\application.properties ,多个目标数据库信息严格按照配置序号递增,配置如下:

警告

所有配置文件路径禁止含中文,建议只含有英文,下同

unisql.datasource[0].url=jdbc:unisql:oceanbase://127.0.0.1:2881/SYS?sourceDialect=oracle&targetDialect=ocean_base_oracle
unisql.datasource[0].user=user
unisql.datasource[0].password=password

unisql.datasource[1].url=jdbc:unisql:mysql://127.0.0.1:15001/test?sourceDialect=oracle&targetDialect=tdsql_mysql
unisql.datasource[1].user=user
unisql.datasource[1].password=password
  1. 进入 DBeaver 安装目录,例如windows:D:\Program Files\DBeaver ,macOS 右键点击 dbeaver.app,选择 “显示包内容”。

  2. 找到并修改 dbeaver.ini 文件,增加1行:

-Dunisql.multi.configuration.path=D:\unisql\application.properties
  1. 保存文件配置,重启DBeaver。

警告

如果仅使用 DBeaver集成统一SQL ,请删除上述 dbeaver.ini 文件配置,保存,重启DBeaver

2.7.3. 新增驱动管理器

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

  2. 创建新驱动 的第一个tab页面 设置

  1. 驱动名称:为便于区分可根据的操作源数据库来填写,例如 UNISQL-Oracle-MULTIUNISQL-MYSQL-MULTI

  2. 驱动类型:选择默认的 Generic

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

  4. URL模板(目前仅支持源为Oracle的数据库):

  1. UNISQL-MULTI-Oracle: jdbc:unisql:oracle:thin:@{host}[:{port}][:{database}]

  2. UNISQL-MULTI-MYSQL: jdbc:unisql:mysql://{host}[:{port}]/[{database}]

../_images/ltsql-multi-01.jpg
  1. 创建新驱动 第二个tab页面

  1. 点击 添加工件,在 依赖声明 中添加统一SQL的主依赖:

<dependency>
    <groupId>io.github.hslightdb</groupId>
    <artifactId>sql-convert-runtime</artifactId>
    <version>23.4.0.0</version>
</dependency>
  1. 继续点击 添加工件,在 依赖声明 中添加统一SQL的动态库依赖:

<dependency>
    <groupId>io.github.hslightdb</groupId>
    <artifactId>sql-convert-runtime-native</artifactId>
    <version>23.4.0.0</version>
    <classifier>debug</classifier>
</dependency>
  1. 继续点击 添加工件,在 依赖声明 中添加源和目标数据库的jdbc驱动(源和目标的数据库jdbc驱动都要添加):

  1. Oracle:

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.14.0.0</version>
</dependency>
  1. PostgreSQL:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.6.0</version>
</dependency>
  1. LightDB-Oracle:

<dependency>
    <groupId>io.github.hslightdb</groupId>
    <artifactId>ltjdbc</artifactId>
    <version>42.2.25-23.4.0.0</version>
</dependency>
  1. TDSQL-MySQL 5.7:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>
  1. OceanBase-Oracle 3.2+:

<dependency>
    <groupId>com.oceanbase</groupId>
    <artifactId>oceanbase-client</artifactId>
    <version>2.4.4</version>
</dependency>
  1. OceanBase-MySQL 3.2+:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
  1. DM V8-20231011+:

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>Dm8JdbcDriver18</artifactId>
    <version>8.1.1.193</version>
</dependency>
  1. 点击 下载/更新 下载驱动文件,下载完成后点击 确定 ,至此统一SQL的驱动就添加好了。

../_images/ltsql-multi-02.jpg

2.7.4. 使用统一SQL驱动连接目标数据库

创建新的连接到目标数据库,选择上一步新建的驱动后点击下一步,填入主机,端口,数据库/模式,用户名,密码。

../_images/ltsql-multi-03.jpg

以上步骤操作完成就可以在DBeaver的 SQL编辑器 中使用Oracle的语法来测试统一SQL的多发的功能了,如果执行报错的情况,可以点击DBeaver结果的详细信息,结果如果想要查看保存统一SQL的转换DEBUG日志,还需进一步配置。

小技巧

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

2.7.5. (可选)DBeaver全局库添加日志库

  1. 在任意文件夹下新建一个logback的配置文件,例如:D:\unisql\logback.xml ,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="UnisqlLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D:/unisql/unisql.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>D:/unisql/unisql.%d{yyyy-MM}.%d{yyyy-MM-dd.HH}.%i.log.gz</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>15</MaxHistory>
            <!-- 单个文件达到最大100MB时开始切分 -->
            <maxFileSize>100MB</maxFileSize>
            <!--日志容量超过5GB,即使没有到保存期限的15天也会开启日志清理 -->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.hundsun.lightdb.unisql" level="DEBUG" additivity="false">
        <appender-ref ref="UnisqlLog" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
  1. 进入 DBeaver 安装目录,例如windows:D:\Program Files\DBeaver ,macOS 右键点击 dbeaver.app,选择 “显示包内容”。

  2. 找到并修改 dbeaver.ini 文件,增加2行:

-Dunisql.debug=true
-Dlogback.configurationFile=D:\unisql\logback.xml
  1. 为了便于查看和输出统一SQL的DEBUG调试日志,提前下载好这3个jar包放到任意文件夹下:

  1. 点击DBeaver上方导航栏中的 窗口 -> 首选项,在 首选项 左侧找到 连接 -> 驱动 -> 类路径,点击 全局库 右侧加号,将上面提前下载好的3个jar包都添加进去,点击 应用并关闭 后DBeaver会自动关闭并重新打开。

../_images/ltsql-dbeaver-004.png
  1. 重新打开DBeaver后连接进入目标数据库,在SQL编辑器界面执行SQL操作的日志都会输出到 D:\unisql\unisql.log 文件中,如果是jdbc抛出的异常,如PARSER ERROR、RESTORE ERROR也会有相应的错误日志,windows版默认是在 C:\Users\你的用户名\AppData\Roaming\DBeaverData\workspace6\.metadata\dbeaver-debug.log,可以点击DBeaver上方导航栏中的 窗口 -> 首选项,在 首选项 左侧找到 用户界面 -> 错误日志,启用调试日志,查看和设置日志文件位置,方便开发定位问题。

../_images/ltsql-dbeaver-005.png