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

迁移前的准备工作

安装官方的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.pswp.cn/web/89076.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 微信小程序Vue3项目使用内置组件movable-area封装悬浮可拖拽按钮(拖拽结束时自动吸附到最近的屏幕边缘)

一、最终效果 二、具体详情请看movable-area与movable-view官方文档说明 三、参数配置 1、代码示例 <TFab title"新建订单" click"addOrder" /> // title:表按钮文案 // addOrder:点击按钮事件四、组件源码 <template><movable-area cl…

linux kernel为什么要用IS_ERR()宏来判断指针合法性?

在 Linux 内核中&#xff0c;IS_ERR() 宏的设计与内核的错误处理机制和指针编码规范密切相关&#xff0c;主要用于判断一个“可能携带错误码的指针”是否代表异常状态。其核心目的是解决内核中指针返回值与错误码的统一表示问题。以下从技术背景、设计逻辑和实际场景三个维度详…

Cookie与Session:Web开发核心差异详解

理解 Cookie 和 Session 的区别对于 Web 开发至关重要,它们虽然经常一起使用,但扮演着不同的角色。核心区别在于: Cookie:存储在客户端(用户的浏览器)的数据片段。 Session:存储在服务器端的数据结构,用于跟踪特定用户的状态。 下面是详细的对比: 特性CookieSession…

【相干、相参】 雷电名词溯源

〇、废话因缘 最近某些国产的微波制造公司总是提到一个概念【相干】【相参】【严格相参】等等概念层出不穷&#xff0c;让人苦恼。 一、这玩意还是英文溯源吧 这几个概念都聚焦在一个单词【Coherence】&#xff1b;所以就是说两个波形之间有某种联系&#xff0c;不一定就是完全…

MYSQL练习2

一、对mydb11_stu库进行查询步骤1.创建mydb11_stu库并使用2.创建score表和student表3.向两张表插入数据student表&#xff1a;score表&#xff1a;4.完成查询&#xff08;1&#xff09;分别查询student表和score表的所有记录&#xff08;2&#xff09;查询student表的第2小到5条…

Spring Boot全局异常处理:打造坚如磐石的应用防线

引言在当今的软件开发领域&#xff0c;随着业务的日益复杂和系统规模的不断扩大&#xff0c;Spring Boot 已成为 Java 开发中备受青睐的框架。它以其强大的功能、便捷的配置和快速的开发体验&#xff0c;帮助开发者们高效地构建各种应用程序。在 Spring Boot 应用的开发过程中&…

药品挂网价、药品集采价格、药品上市价格一键查询!

相信许多人在查询药品价格时感到无从下手&#xff0c;那是因为对药品定价机制和标准的不了解&#xff0c;医院及药店的药品价格查询可通过笔者之前的文章进行了解&#xff1a;如何查询药品的价格&#xff08;医院&药店&乡镇卫生院&#xff09;&#xff1f; 而今天笔者要…

【iOS】方法与消息底层分析

目录 前言 方法的本质 向不同对象发送消息 发送实例方法 发送类方法 对象调用方法 实际执行是父类 向父类发送类方法 消息查找流程 开始查找 快速查找流程 慢速查找流程 动态方法决议 应用场景 优化方案 消息转发机制 快速转发流程 应用场景 慢速转发流程 应…

如何通过 WebSocket 接口订阅实时外汇行情数据(PHP 示例)

步骤 1&#xff1a;准备工作确保已安装 PHP 和 Composer安装 WebSocket 客户端库&#xff1a;composer require textalk/websocket步骤 2&#xff1a;编写代码订阅行情以下是最简可运行的 PHP 示例&#xff0c;订阅 EUR/USD 的 1分钟K线数据&#xff1a;<?phprequire vendo…

第十八篇 数据清洗:Python智能筛选与统计:从海量Excel数据中秒级挖掘,辅助决策!你的数据分析利器!

Excel 数据挖掘Excel筛选复杂&#xff0c;统计耗时&#xff0c;无法快速挖掘数据价值1.数据筛选核心&#xff1a;df.loc与df.iloc&#xff0c;精准定位你想要的数据1.1基于条件筛选&#xff1a;过滤数据中的不恰当因素1.2 多条件组合筛选&#xff1a;精确锁定目标数据1.3字符串…

小木的机器学习日记——KNN

核心知识点总结与星级排序我为你梳理了这节课的精髓&#xff0c;并按照重要性进行了星级评定&#xff08;★★★★★为最高&#xff09;。★★★★★ 核心思想&#xff1a;回归 (Regression) 到底是什么&#xff1f;是否关键&#xff1a;是必须了解&#xff1a;是必须记住&…

Product Hunt 每日热榜 | 2025-07-15

1. OpenArt One-Click Video Story 标语&#xff1a;一键即可将任何内容转换为可随时发布的视频。 介绍&#xff1a;有一个创意、剧本、节奏&#xff0c;或者喜欢的角色吗&#xff1f;OpenArt可以将它们变成一个视觉故事—完整的画面、音乐和叙事结构&#xff0c;轻松实现&am…

Dubbo高阶难题:异步转同步调用链上全局透传参数的丢失问题

​问题场景​&#xff1a; 在分布式电商系统中&#xff0c;下单服务通过Dubbo调用库存服务&#xff08;异步接口返回CompletableFuture&#xff09;&#xff0c;同时在Gateway层通过RpcContext设置traceId。你发现&#xff1a;当库存服务内部同步调用其他服务时&#xff0c;tra…

实测两款效率工具:驾考刷题和证件照处理的免费方案

今天阿灿给大家推荐两款实用的软件&#xff0c;一款是驾考助手&#xff0c;另一款是证件照制作软件。第一款&#xff1a;驾考助手以前考驾照&#xff0c;很多人担心过不了关&#xff0c;还会花冤枉钱买VIP练习&#xff0c;精选500题。其实&#xff0c;只要用对工具&#xff0c;…

Python 函数的维护性与复用性

目录 一、从“能跑就行”到“能改不怕”——维护性的第一要义 二、单一职责与最小惊讶——维护性的纵深防御 三、可组合的乐高——复用性的第一阶梯 四、面向协议设计——复用性的第二阶梯 五、异常策略与日志——维护性的隐形护盾 七、测试金字塔——维护性的最后护城河…

C++中的模板参数 vs 函数参数:编译期与运行期的分界线

引言 在日常开发中&#xff0c;我们经常接触 函数参数&#xff0c;这是控制函数行为的最直接方式。但在 C 中还有一种强大的机制 —— 模板参数&#xff08;Template Parameters&#xff09;&#xff0c;它赋予了我们在编译期就生成代码结构的能力。 本文将通过直观的类比&…

Elasticsearch 9.x 搜索执行过程(源码解析)

1. Elasticsearch 9.x 搜索执行过程 - 源码解析 #mermaid-svg-Vp6WKKBLo3omajeq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Vp6WKKBLo3omajeq .error-icon{fill:#552222;}#mermaid-svg-Vp6WKKBLo3omajeq .error…

简单易懂,操作系统的内存管理机制是如何实现的

系统地梳理一下操作系统在“内存管理”这个重要领域中&#xff0c;到底扮演了什么角色&#xff0c;需要完成哪些核心任务。想象一下&#xff0c;操作系统是一位经验丰富的高级公寓管理员。内存&#xff1a;就是这栋高级公寓大楼。进程&#xff1a;一个个想要入住的租户。内存管…

《大数据技术原理与应用》实验报告一 熟悉常用的Linux操作和Hadoop操作

目 录 一、实验目的 二、实验平台 三、 实验内容和要求 1. 安装虚拟机 2. 熟悉常用的 Linux 命令 3. 进行 Hadoop 伪分布式安装 4. 熟悉常用的 Hadoop 操作 四、实验环境 五、实验内容与完成情况 1. 安装虚拟机 2. 熟悉常用的 Linux 命令 3. 进行 Hadoop 伪分布式…

I/O 多路复用详解笔记

I/O 多路复用笔记 什么是I/O多路复用 I/O多路复用&#xff08;I/O Multiplexing&#xff09;是一种**允许单个线程&#xff08;或进程&#xff09;监听多个I/O描述符&#xff08;fd&#xff09;**上是否就绪&#xff08;可读/可写/异常&#xff09;的方法。这种方式可以有效地管…