oracle jdbc配置: jdbc.validationQuery=SELECT COUNT(*) FROM DUAL jdbc.driverclass=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@192.168.2.25:1521:orcl jdbc.username=keye00 jdbc.password=keye00
mysql jdbc配置: jdbc.validationQuery=SELECT COUNT(*) FROM DUAL jdbc.driverclass=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/keye?useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&zeroDateTimeBehavior=convertToNull&useSSL=false jdbc.username=keye00 jdbc.password=keye00
kingbase jdbc配置:
jdbc.validationQuery=SELECT COUNT(*) FROM DUAL jdbc.driverclass=com.kingbase8.Driver jdbc.url=jdbc:kingbase8://127.0.0.1:54321/koye jdbc.username=koye00 jdbc.password=KOYEkeye00
人大金仓jar包:
将jdbc驱动包下载来,不用什么积分下载,我已经分享到阿里云盘:
阿里云盘分享
pom.xml依赖 导入
<dependency>
<groupId>com.kingbase8.jdbc</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/jar/kingbase8-8.6.0.jar</systemPath>
</dependency>
函数需要注意的点:
1:必须针对数据库名称,建立用户名,赋予权限。否则即使设置default_schema,hibernate在执行原生的sql时也会报错“com.kingbase8.util.KSQLException: 错误: 关系 "cms_base_content" 不存在”。例如项目数据库名project_oa,则必须使用用户名为project_oa连接。
2:V8默认oracle风格,主键生成策略默认序列SEQUENCE
,转库后需要手动添加序列hibernate_sequence
。目前不支持根据配置选择默认主键策略
3:字符串判空问题,我们使用的版本金仓直接把空字符串当成null,这样在sql里使用 a = ''判断空就会有问题。这个可以自己修改配置,来确定字符串的空值类型。需要改一下数据库data目录下的kingbase.conf文件;添加 参数ora_input_emptystr_isnull=off; 重启数据库 生效
4:字段必须出现在 GROUP BY 子句中或者在聚合函数中使用,才可以在结果里展示
函数适配(持续更新)
总体来说,数据库适配过程中,需要对代码改动的,主要是不同的数据库对函数的支持不同,同一个函数或同一个功能,MySQL和Oracle的都不一样。
date_format无法识别,但是to_date、to_char支持,需要使用oracle风格的写法
trunc处理日期函数,在金仓里不可以,需要使用date_trunc
SELECT date_trunc( 'day', TIMESTAMP '2020-7-13 11:30:35' ) - date_trunc( 'day', TIMESTAMP '2020-7-03 11:30:35' );
trunc处理日期相减的值,不支持,可以使用 to_number
SELECT to_number(date_trunc( 'day', TIMESTAMP '2020-7-13 11:30:35' ) - date_trunc( 'day', TIMESTAMP '2020-7-03 11:30:35' ));
datediff函数不支持,可以使用to_number和date_trunc结合使用
select to_number(date_trunc('day', ISNULL(b.reply_date,now())) - date_trunc('day', a.ADD_DATE))
oracle 的ifnull需要使用 ISNULL
oracle 的 CONVERT函数,金仓不支持,可以使用trunc,但是这个需要给一个参数,表示小数位数
CONVERT (t.count / 5090 * 100,DECIMAL ( 15, 3 )) 改为 trunc(t.count / 5090 * 100, 3)
人大金仓迁移工具使用流程:
进入DtsTools下面找到dts.exe启动程序
创建数据连接
创建oracle的连接池
再创建人大金昌的连接池 选版本就选你安装的版本即可
然后创建迁移的任务
选择刚刚创建的连接
点击要迁移的数据库的名字
并发和默认调整一下 ,如果数据量大的情况你可以适当调大,如果适中就默认即可
点击完成即可
到此迁移过程结束,如有报错:
1:看最大连接数或者是并发太大,出现的问题,那么你需要调整并发和最大连接的数据
2:查看报错日志
3:可以看到在上面ddl中报错的语句来对于修改