当前位置: 首页 > 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.dtcms.com/a/273760.html

相关文章:

  • 多表查询-2-多表查询概述
  • 黑马点评系列问题之P55优惠券秒杀 快捷键问题 Ctrl+D显示不出来老师给的界面
  • 第八章 STM32之IAP编程
  • mysql数据库导入导出命令
  • ARM架构CPU的市场和生态
  • 欢乐熊大话蓝牙知识26:想让设备秒连?Connection Interval 配得对吗?
  • 零碳园区:安科瑞EMS如何破解新能源消纳难与高耗能产业转型困局
  • 锁的艺术:从Mutex到ReentrantLock,掌握并发编程的脉搏
  • 大模型使用
  • Qt 实现新手引导
  • Windows解决 ping 127.0.0.1 一般故障问题
  • unity 有打击感的图片,怎么做动画,可以表现出良好的打击效果
  • STM32串口通信(寄存器与hal库实现)
  • 2025年7月11日学习笔记一周归纳——模式识别与机器学习
  • 高校智慧教室物联网系统设计与实现
  • 《磁力下载工具实测:资源搜索+高速下载一站式解决方案》
  • 串行数据检测器,检测到011,Y输出1,否则为0.
  • JavaScript加强篇——第五章 DOM节点(加强)与BOM
  • 网安系列【18】之SpringBoot漏洞
  • React Three Fiber 实现 3D 模型点击高亮交互的核心技巧
  • 小架构step系列11:单元测试引入
  • Rocky Linux上使用NVM安装Node.js 18
  • 老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
  • 大数据时代UI前端的用户体验设计新思维:以数据为驱动的情感化设计
  • golang -gorm 增删改查操作,事务操作
  • 分布式推客系统全栈开发指南:SpringCloud+Neo4j+Redis实战解析
  • Neo4j启动
  • 从一到无穷大 #47:浅谈对象存储加速
  • 基于vscode的go环境安装简介
  • 企业级LLM知识库:构建智能知识管理平台,赋能业务增长