当前位置: 首页 > news >正文

数据库迁移人大金仓数据库

迁移前的准备工作

安装官方的kdts和KStudio工具

方案说明

一、数据库迁移:可以使用kdts进行数据库的按照先迁移表结构、后数据的顺序迁移(kdts的使用可以参考官方文档)

其他参考文档

人大金仓官网:https://download.kingbase.com.cn/xzzx/index.htm

迁移实例:1.Mysql迁移到kingbase(人大金仓)全过程方案(java)_mysql迁移kingbase-CSDN博客

2.Mysql迁移至KingBase(金仓数据库)避坑指南-Java版_mysql数据库移植到kingbase-CSDN博客

迁移过程的注意事项

  • 根据人大金仓的版本不同,迁移过程的适配兼容也不同,具体问题具体处理
  • mysql5.7表结构迁移kingbase8.6,数据类型bit(1)映射人大金仓boolean
  • mysql的bit(1)数据库类型人大金仓8.6不兼容,可以复制一个库,将表里面的字段类型调整为varchar后导出数据,然后再导入人大金仓

二、项目适配

  1. 引入人大金仓的驱动依赖
    <dependency><groupId>cn.com.kingbase</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version>
    </dependency>
  2. 数据源配置修改,这里以基础平台为例:
  • url=jdbc:kingbase8://172.16.26.196:54321/xxx?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&wait_timeout=1814400&serverTimezone=Asia/Shanghai¤tSchema=xx_dev,sys_catalog
  • driverClassName=com.kingbase8.Driver
    注意事项
    A、数据源管理druid不完全兼容kingbase,其中filter:wall 目前不支持kingbase需要去掉,否则启动不了
    B、url配置中currentSchema=xx_dev,sys_catalog为模式配置,其中xx_dev为模式名,sys_catalog为固定值,作用为sql查询时表名和系统冲突时,指定查询表名
  1. 项目中的sql语句适配注意事项
  • 函数的区分可参照人大金仓的文档
  • 所有的涉及到的函数无论文档是否说明有区别,都要验证是否能正常执行和是否达到预期

三、一些需要注意的常用的函数适配整理(人大金仓文档没提及的或者错误的)

  • mysql中NOW()与kingbase精度不一致,但是可以使用CURRENT_TIMESTAMP()替换,这两者精度一致

  • mysql中DATE()函数kingbase不兼容,根据具体的需求决定是否直接不用或跟据需求用如DATE_TRUNC(String,date|datetime|timestamp),其中str为精度修饰,如year、month、day、hour,列如DATE_TRUNC(‘day’,CURRENT_TIMESTAMP())

  • DATE_ADD(8.6版本该函数不存在)、DATE_SUB加减时间函数中的单位数量格式不兼容,比如mysql中为DATE_SUB(NOW(),INTERVAL 1 DAY),则kingbase8.6中必须改为DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL ‘1’ DAY),否则kingbase语法不通过

  • mysql中的date_format()在kingbase中不兼容(8.6版本验证兼容),用TO_CHAR()平替

  • kingbase中的TIMESTAMPDIFF()函数功能虽然和mysql一致,但单位需要用单引号,否则语法错误,如TIMESTAMPDIFF(‘SECOND’,a.from_time,a.end_time)

  • 递归查询的适配例子,
    mysql语句

    select * from (select classify_id,classify_parent,classify_code,classify_name,remark from base_major_classify where classify_parent is not null ) rd,(select @pid := #{parentId}) pd where FIND_IN_SET(classify_parent,@pid)>0 and @pid := CONCAT(@pid,',',classify_id)

    kingbase语句

    WITH RECURSIVE subclassify AS (SELECT classify_id,classify_parent,classify_code,classify_name,remarkFROM base_major_classifyWHERE classify_parent IS NOT NULL AND FIND_IN_SET(classify_parent, #{parentId}) > 0UNION ALLSELECT bct.classify_id, bct.classify_parent, bct.classify_code, bct.classify_name, bct.remarkFROM base_major_classify bctJOIN subclassify st ON bct.classify_parent = st.classify_id)SELECT *FROM subclassify

    四、工作流初始化的适配

    @Aspect
    @Component
    @RequiredArgsConstructor
    public class KingbaseSupport {private final ProcessEngineConfigurationImpl processEngineConfiguration;@Pointcut("execution(* org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine())")public void access() {}@Before("access()")public void before() {processEngineConfiguration.setDatabaseType("mysql");}
    }

数据库操作命令
连接数据库
ksql -h <hostname> -U <username> -d <database> -p <port>
退出 /q
打包数据库
sys_dump -Usystem -duser1 -p54321 -Fc >D:\list\test2.dmp
还原数据库
./sys_restore -h127.0.0.1 -p54321 -Usystem -d test /xx/bushu/xx-int.dmp
./sys_restore -h127.0.0.1 -p54321 -Usystem  -d test /xx/bushu/dump.dmp
服务器启动 zk
/usr/local/zookeeper-3.9.2/bin/zkServer.sh start
服务器启动  tongweb
/data/TongWeb7.0.4.9_M3_Standard_Linux/bin/startserverbg.sh
数据库默认登录执行命令路径:
/data/Kingbase/ES/V8/KESRealPro/V008R006C008B0020/Server/bin
连接数据库:./ksql -U system -d test  默认用户 指定test数据库


查看数据库
select datname from sys_database;
查看系统用户
select * from sys_user;
创建用户
create user user1 with superuser password 'password';
创建数据库,并赋权给创建的用户
create database test with owner='user1' encoding utf8;
查看表:
SELECT table_name as tbName from information_schema.TABLES where table_schema='test_online';
还原数据库dmp文件
./sys_restore -h 127.0.0.1  -p 54321 -U system -W -d  xxx/data/data_bak/test_online.dmp
./sys_restore -h 127.0.0.1  -p 54321 -U system -W -d user1  /data/data_bak/int.dmp

本地调试
1.本地启动
C:\Program Files\Kingbase\ES\V9\KESRealPro\V009R001C001B0025\Server\bin>sys_ctl.exe -D "C:\Program Files\Kingbase\ES\V9\data" start
2.安装 jar驱动
mvn install:install-file -Dfile=D:\hibernate-4.dialect.jar -DgroupId=com.kingbase8 -DartifactId=kingbase8 -Dversion=8.6.0 -Dpackaging=jar
3.查询表数量 SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'your_database_name';
select * from sys_stat_activity;//查看连接
-- 查看最大并发连接量
show max_connections;
-- 查看当前连接数
select connections();
-- 查看连接详情
select * from sys_stat_activity;
-- 关闭空闲连接
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state='idle';
--查询license有效期
select GET_LICENSE_VALIDDAYS();
问题集合
迁移数据问题  ps:用户移植:最好创建的账号名字和源数据库(mysql)账号同名
1.账号权限设置    默认login权限  创建时可用system用户赋予 create update等权限
2.外键问题   迁移时有外键的表存在迁移顺序问题,经查验 可利用迁移工具-迁移任务-详情页面进行二次迁移即可
3.主键自增问题  人大金仓主键自增函数 auto_increment 不兼容   系统自带 serial (bigserial)类型(还未查验可用性。。)
4.大小写兼容问题   兼容配置里
5.mysql 里以 sys_ 开头的  人大金仓不支持  会默认为系统表    目前处理方案  修改sql  表名改为 模式名+表名
6.提示TINYINT无法转到boolean   表字段类型从tinyint改成boolean.(或者在用kts迁移工具迁移时,映射tinyint到boolean)
7.查询条件类型要保持统一  例  del_flag  数据库内为 char    sql里del_flag ='0'  不能 del_flag =0
8.如果有acticity工作流   act_ge_property bixuqianyi
9.DATE_FORMAT 不兼容  改 to_char  注意只替换mapper文件的  配置的xml里不要改
10.char 类型 要转varchar  尤其是查询用到的字段
11.从数据库拷过来的sql 带‘  的要干掉
12.xx_int 3.0服务文件下载会跳转指向nginx
13.修改数据库ora_input_emptystr_isnull参数为off。ora_input_emptystr_isnull=on的场景:空字符串''使用=''数据库会将输入的空字符串作为null值处理,作为null值的时候不能匹配到数据
14.date()类型数据兼容性不高 建议都用Timestemp  且要进行精度设置(人大金仓有精度值控制,跟mysql不一样)
修改sql
ALTER TABLE xxx.sys_config MODIFY data_type varchar (100);
15.人大金仓工具 以项目pom文件sql连接配置可增加&currentSchema=xxxx,sys_catalog  配置  从而可避免表名与系统关键词重复

 

http://www.lryc.cn/news/585227.html

相关文章:

  • stm32-modbus-rs485程序移植过程
  • 微算法科技基于格密码的量子加密技术,融入LSQb算法的信息隐藏与传输过程中,实现抗量子攻击策略强化
  • 【AI大模型】RAG系统组件:向量数据库(ChromaDB)
  • 新作品:吃啥好呢 - 个性化美食推荐
  • QT跨平台应用程序开发框架(4)—— 常用控件QWidget
  • 【机器学习】保序回归平滑校准算法
  • AI在医疗影像诊断中的应用前景与挑战
  • RabbitMQ 之消息积压
  • Linux进程间通信--命名管道
  • Leaflet面试题及答案(1-20)
  • [面试] 手写题-选择排序
  • 【Springboot】Bean解释
  • 为什么必须掌握Java异常处理机制?——从代码健壮性到面试必考题全解析
  • 结构化数据、非结构化数据区别
  • Web安全 - 基于 SM2/SM4 的前后端国产加解密方案详解
  • 远程登录docker执行shell报错input is not a terminal问题
  • 如何将公式图片转换为公式格式到wps/word里面
  • 红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》第1篇 | 开篇:从蜂窝到星链,PLMN——连接世界的无形之网
  • 线性回归原理推导与应用(十):逻辑回归多分类实战
  • LabVIEW前面板设计--控件/文字遮挡
  • Microsoft Word 中 .doc 和 .docx 的区别
  • 利用BeautifulSoup解析大众点评区域店铺网页
  • LabVIEW远程数电实验平台
  • VIT(视觉Transformer)
  • 【爬虫】- 爬虫原理及其入门
  • 提示工程:突破Transformer极限的计算科学
  • 进程状态 + 进程优先级切换调度-进程概念(5)
  • 需求升级,创新破局!苏州金龙赋能旅游客运新生态
  • 20250711荣品RD-RK3588开发板在Android13下的开机自启动的配置步骤
  • 宝塔命令Composer 更改数据源不生效