2.6. DBeaver集成统一SQL

统一SQL支持集成到DBeaver中,方便开发调试,集成方法在本节进行说明。

2.6.1. 下载DBeaver社区版

访问 DBeaver Community 下载最新版。

2.6.2. 新增驱动管理器

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

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

  1. 驱动名称:为便于区分可根据适配的数据库来填写,例如 UNISQL-Oracle2PostgreSQLUNISQL-Oracle2LightDBUNISQL-Oracle2TDSQL-MySQL5.7UNISQL-Oracle2OceanBase-OracleUNISQL-Oracle2OceanBase-MySQLUNISQL-Oracle2DM

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

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

  4. URL模板(根据实际数据库类型选择以下一种):

  1. Oracle2PostgreSQL: jdbc:unisql:postgresql://{host}[:{port}]/[{database}]?sourceDialect=oracle&targetDialect=postgresql

  2. Oracle2LightDB: jdbc:unisql:postgresql://{host}[:{port}]/[{database}]?sourceDialect=oracle&targetDialect=lightdb_oracle

  3. Oracle2TDSQL-MySQL5.7: jdbc:unisql:mysql://{host}[:{port}]/[{database}]?sourceDialect=oracle&targetDialect=tdsql_mysql

  4. Oracle2OceanBase-Oracle: jdbc:unisql:oceanbase://{host}[:{port}]/[{database}]?sourceDialect=oracle&targetDialect=ocean_base_oracle

  5. Oracle2OceanBase-MySQL: jdbc:unisql:mysql://{host}[:{port}]/[{database}]?sourceDialect=oracle&targetDialect=ocean_base_mysql

  6. Oracle2DM: jdbc:unisql:dm://{host}[:{port}]/[{database}]?sourceDialect=oracle&targetDialect=dm

../_images/ltsql-dbeaver-001.png
  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驱动(根据实际数据库类型选择以下一种):

  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-dbeaver-002.png

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

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

../_images/ltsql-dbeaver-003.png

以上步骤操作完成就可以在DBeaver的 SQL编辑器 中使用Oracle的语法来测试统一SQL的转换功能了,如果想要查看统一SQL的转换DEBUG日志,还需进一步配置。

2.6.4. (可选)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 文件中,日志内容示例如下:

[UNISQL][transformSql]cost:134900 ns. From:
merge into
    bonuses b
        using (
    select
        employee_id,
        salary,
        dept_no
    from
        employee
    where dept_no = 20 ) e on
    (b.employee_id = e.employee_id)
    when matched then update set
    b.bonus = e.salary * 0.1
To:
WITH e AS (SELECT employee_id,salary,dept_no FROM employee WHERE dept_no=20) UPDATE bonuses AS b SET bonus=e.salary*0.1 FROM e WHERE b.employee_id=e.employee_id

From 后面是源语句, To 后面是转换后的语句,如果是jdbc抛出的异常,如PARSER ERROR、RESTORE ERROR也会有相应的错误日志,windows版默认是在 C:\Users\你的用户名\AppData\Roaming\DBeaverData\workspace6\.metadata\dbeaver-debug.log,可以点击DBeaver上方导航栏中的 窗口 -> 首选项,在 首选项 左侧找到 用户界面 -> 错误日志,启用调试日志,查看和设置日志文件位置,方便开发定位问题。

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