1. 项目背景与需求解析
在企业级数据集成场景中,达梦数据库作为国产数据库的代表产品之一,其与ETL工具的适配性一直是数据工程师关注的重点。最近我在某政务数据迁移项目中遇到了Kettle 9.2与达梦DM8数据库的对接需求,经过实际验证总结出一套稳定可靠的连接方案。
达梦DM Database Server 64 V8(简称DM8)是达梦公司推出的新一代大型通用关系型数据库,采用全新的体系架构,在保持Oracle兼容性的同时增强了分布式处理能力。而Kettle(现称Pentaho Data Integration)作为老牌ETL工具,其9.2版本在数据抽取、转换和加载方面有着成熟的表现。两者的结合能够满足国产化环境下的数据迁移、同步和加工需求。
2. 环境准备与驱动配置
2.1 软件版本确认
在开始配置前,必须确保环境组件版本匹配:
- Kettle版本:Pentaho Data Integration 9.2(社区版/企业版)
- 达梦数据库:DM8(建议使用V8.1.2.192及以上版本)
- JDK版本:1.8(需与达梦驱动兼容)
注意:达梦DM8的JDBC驱动对JDK版本有严格要求,使用JDK11及以上版本可能出现兼容性问题。
2.2 驱动文件获取与部署
达梦官方提供的JDBC驱动包含两个关键JAR文件:
- DmJdbcDriver18.jar - 核心连接驱动
- DmDialect-for-hibernate5.3.jar - 方言支持包
部署步骤:
- 将上述JAR文件复制到Kettle安装目录的
lib文件夹下 - 同时放入
># 示例目录结构 /pentaho/data-integration ├── lib/ │ └── DmJdbcDriver18.jar └── plugins/ └── pentaho-database-di/ └── lib/ └── DmJdbcDriver18.jar3. 数据库连接配置详解
3.1 新建数据库连接
在Spoon界面中按以下步骤操作:
- 点击主菜单"文件"→"新建"→"数据库连接"
- 在弹出的连接配置窗口中选择连接类型为"Generic database"
- 填写关键参数:
参数项 配置值示例 说明 连接名称 DM8_PROD 自定义连接标识 主机名称 192.168.1.100 达梦服务器IP 数据库名称 DMHR 具体数据库实例名 端口号 5236 达梦默认端口 用户名 SYSDBA 管理员账户 密码 Dameng123 对应密码 3.2 关键驱动配置
在"Custom connection URL"处填写达梦专用连接字符串:
jdbc:dm://192.168.1.100:5236?schema=DMHR&zeroDateTimeBehavior=convertToNull驱动类配置:
dm.jdbc.driver.DmDriver经验提示:如果连接时报"ClassNotFoundException",检查驱动JAR是否放入了正确的目录,特别是plugins子目录容易被忽略。
4. 高级参数调优
4.1 连接池配置建议
对于生产环境,建议调整以下连接池参数:
# 在连接属性中添加 maxActive=20 maxIdle=10 minIdle=5 initialSize=5 validationQuery=SELECT 1 FROM DUAL testWhileIdle=true timeBetweenEvictionRunsMillis=300004.2 时区与字符集处理
达梦数据库与Kettle的时区、字符集设置需要保持一致:
- 在Kettle的
kettle.properties中添加:KETTLE_DEFAULT_CHARSET=UTF-8 org.pentaho.database.defaultDateFormat=yyyy-mm-dd - 达梦服务端需配置:
ALTER SYSTEM SET 'TIME_ZONE' = '+8:00'; ALTER DATABASE CHARACTER SET UTF8;
5. 常见问题排查指南
5.1 连接失败问题
现象:
Connection refused或Network adapter could not establish the connection排查步骤:
- 确认达梦服务已启动:
systemctl status DmServiceDMSERVER - 检查防火墙规则:
firewall-cmd --list-ports | grep 5236 - 验证网络连通性:
telnet 192.168.1.100 5236
5.2 中文乱码问题
解决方案:
- 确保Kettle作业的字符集设置为UTF-8
- 在连接URL中添加参数:
charsetEncoding=UTF-8 - 达梦数据库建表时指定字符集:
CREATE TABLE TEST (COL1 VARCHAR(100)) DEFAULT CHARSET=UTF8;
5.3 批量插入性能优化
当使用"表输出"步骤时,通过以下配置提升性能:
- 启用批量提交:设置
Batch size为1000-5000 - 关闭索引:
ALTER TABLE xxx DISABLE KEYS - 使用直接路径加载:在URL中添加
directPathLoad=true
6. 实际应用案例演示
6.1 数据迁移场景
以迁移Oracle表到达梦为例的转换设计:
- 输入步骤:使用"表输入"从Oracle抽取数据
- 转换步骤:字段类型映射(特别注意CLOB/BLOB处理)
- 输出步骤:配置达梦连接器的"表输出"
类型映射参考表:
Oracle类型 达梦对应类型 处理建议 VARCHAR2 VARCHAR 直接映射 NUMBER DECIMAL 检查精度是否匹配 DATE TIMESTAMP 注意时区转换 CLOB TEXT 需要特殊处理 6.2 增量同步方案
利用达梦的CDC特性实现增量同步:
- 在转换中使用"获取系统信息"步骤记录上次更新时间
- 配置SQL条件如:
WHERE UPDATE_TIME > ? - 结合达梦的物化视图特性提升同步效率
-- 达梦端创建物化视图日志 CREATE MATERIALIZED VIEW LOG ON SOURCE_TABLE WITH PRIMARY KEY, ROWID, SEQUENCE INCLUDING NEW VALUES;7. 性能监控与维护建议
7.1 连接状态监控
通过以下SQL监控达梦连接情况:
SELECT SESS_ID, SQL_TEXT, STATE, CREATE_TIME FROM V$SESSIONS WHERE USER_NAME='SYSDBA';7.2 定期维护操作
建议在Kettle作业中添加维护步骤:
- 定期收集统计信息:
DBMS_STATS.GATHER_TABLE_STATS('SYSDBA','TABLE_NAME'); - 重建索引:
ALTER INDEX IDX_NAME REBUILD ONLINE; - 清理日志表:
PURGE RECYCLEBIN;
在实际项目中,我发现达梦DM8与Kettle 9.2的配合度相当不错,特别是在处理千万级数据迁移时,通过合理的批量参数配置,传输速率可以稳定在15-20万行/分钟。一个实用的技巧是在连接URL中添加
loggerLevel=INFO参数,可以在Kettle日志中输出详细的SQL执行信息,这对调试复杂转换非常有用。