使用Oracle数据库

数据库选型建议

PIGX 官方目前主推 MySQL 8 和 达梦国产化数据库,建议优先在这两种数据库上跑通基础功能后,再探索使用其他类型的数据库。 由于底层采用了 MyBatis-Plus,已屏蔽大部分数据库间的差异。因此,只需通过工具将 MySQL 脚本转换为目标数据库的格式即可完成迁移,无需复杂的额外调整。

环境说明

依赖版本
数据库Oracle 21.3.0.0.0
PIGX5.8
架构模式微服务
数据库同步工具dbswitch 1.9.8

① 同步 MySQL 最新脚本获取对应的 Oracle 脚本

安装同步工具

docker run -d --name dbswitch  -e DBTYPE=h2  -p 9088:9088 
  registry.cn-hangzhou.aliyuncs.com/inrgihc/dbswitch:latest

在浏览器中访问:http://localhost:9088,默认账号密码:admin/123456

创建同步任务

  • 在“链接管理”中添加数据源,分别添加 MySQL(指向 PIGX 的 MySQL 数据库)和 Oracle 的数据源(目标为 PIGX 的 Oracle 数据库)。

    数据源配置
  • 在“任务管理”中创建任务并启动执行。

    创建任务
在配置目标端时,注意在【同步前置执行SQL脚本】中执行以下内容:
CREATE PROCEDURE RemoveNotNullConstraintsExceptPrimaryKey()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tbl_name VARCHAR(255);
    DECLARE cur CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;

    read_loop: LOOP
        FETCH cur INTO tbl_name;
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- 构建 ALTER 语句,排除主键列
        SET @alter_sql = (
            SELECT GROUP_CONCAT(CONCAT('MODIFY ', COLUMN_NAME, ' ', COLUMN_TYPE, ' NULL'))
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE()
            AND TABLE_NAME = tbl_name
            AND IS_NULLABLE = 'NO'
            AND COLUMN_KEY != 'PRI'
        );

        -- 执行修改表结构的 SQL
        IF @alter_sql IS NOT NULL THEN
            SET @full_alter_sql = CONCAT('ALTER TABLE ', tbl_name, ' ', @alter_sql);
            PREPARE stmt FROM @full_alter_sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;

    END LOOP;

    CLOSE cur;
END //

DELIMITER ;

-- 调用存储过程
SET FOREIGN_KEY_CHECKS = 0;
CALL RemoveNotNullConstraintsExceptPrimaryKey();

② 修改数据库连接信息

common-sequence 修改

  • pigx-common-sequence/pom.xml 中保留或修改成oracle驱动:
Oracle驱动配置

修改各模块的数据库连接信息

driver-class-name: oracle.jdbc.OracleDriver
username: XX
password: XX
url: jdbc:oracle:thin:@127.0.0.1:1521:XE

③ 微调 DruidSqlLogFilter 补充 Oracle 类型解析

DruidSqlLogFilter配置

进阶:Nacos 本地模式运行

① 添加 Derby 依赖

pigx-register/pom.xml 中添加 Derby 嵌入式数据库依赖:

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.14.2.0</version>
</dependency>

② 导出配置文件

导出配置文件

③ 关闭pigx-register 数据库连接

关闭数据库连接

④ 导入配置信息

导入配置文件

特别说明

任务调度兼容性

XXL 不支持 MySQL 以外的数据源,请使用 PIGX 内置的 Quartz 任务调度。

Quartz 任务调度