MySQL迁移KingbaseESV8R2的实现步骤

目录
  • 1. 使用Oracle中转
  • 2. 使用KingbaseESV8R3中转
  • 3. 其他问题
    • 1.自增
    • 2.uuid
  • 4. 已发现的 SQL 问题

1. 使用Oracle中转

KingbaseESV8R2只支持从Oracle迁移,所以先MySQL迁移到Oracle。

迁移到Oracle问题:
1.oracle对表名有最大30位限制
2.invalid hex number,无效16进制
3.表数据空,报cannot insert NULL into
4.索引名太长

MySQL迁移Oracle问题就很多了,并且调整很大也很麻烦;Oracle迁移Kingbase时,有时候表迁移会不成功,但多次尝试后又可成功。

2. 使用KingbaseESV8R3中转

联系了金仓技术人员后,得知目前有新版本V8R3,但是不能用于生产环境,可用于测试,并且支持MySQL直接迁移到V8R3。

所以重新安装一台虚拟机(R2和R3不可共存),然后使用R3迁移工具进行迁移。迁移中的源数据库设置记得全选,这样才会迁移视图,索引,外键,默认值等。

迁移到V8R3问题:
1.tinyint(1)迁移后映射成boolean,即使迁移工具中已经映射了,但还是一样。
所以迁移过后需要改表字段类型,有默认值的话也要改默认值

2.注释虽然迁移时选择了,但是使用默认的对象管理器看不到字段的注释。鼠标停留表名,可查看表的注释。目前未找到方式查看。

修改tinyint(1)问题后,即可在R3的对象管理器中选择数据库,进行逻辑备份。
再使用R2的对象管理器,进行逻辑还原。

3. 其他问题

1.自增

MySQL自增和Kingbase自增不同;Kingbase自增和Oracle相同,都是定义一个序列sequence来实现。

目前使用kingbaseV8R3做中转的话,mysql迁移到r3,会帮我们创建好序列,并填好字段的默认值,实现自增。

下面是手动使用自增的方式:

先创建SEQUENCE,命名为test_id_SEQ,这里设置开始值为101

CREATE SEQUENCE test_id_SEQ START 101;

然后再需要自增值的字段的默认值加上

NEXTVAL('test_id_SEQ'::REGCLASS)

之后使用insert语句,test表的字段id就开始从101开始自增

INSERT INTO test (name) values('1');

删除序列之前,需要把字段中的默认值删掉,才能删除序列

DROP SEQUENCE test_id_SEQ

2.uuid

kingbase没有uuid函数,执行报错

select replace(uuid(), '-', '') as id from dual 

暂时先用

select SYS_GUID_NAME() as id from dual;

代替,毕竟mysql和kingbase的uuid生成规则不同

4. 已发现的 SQL 问题

1.不能使用`区分关键词

2.函数IFNULL改NVL

3.group by 中需要把字段都展示出来

4.sql不能出现!='' ,不会报错,但是执行结果null,在Kingbase中空字符串和null等价

5.函数IF改成NVL2,Kingbase中只能判断是否为null

6.字段类型字符串但是存时间,又想格式化时间。需要先将时间转为时间戳,再格式化为字符串

SELECT to_char(to_timestamp('2020-02-20 15:35:44', 'YYYY-MM-DD HH24:MI:SS'),'MM-DD')

7.不能使用双引号"",用单引号''代替

8.不能使用count('')

9.时间格式化,加减

limit_time = limit_time + (now() - apply_time)

MySQL:

limit_time = date_add( limit_time, INTERVAL ( SELECT TimeStampDiff( DAY, now(), apply_time ) ) + 1 DAY ) 

Kingbase:麻烦在于时间和字符串的转换,先将时间戳格式化为字符串,再转回时间才能进行加减

limit_time = limit_time + (to_date(to_char(now(),'YYYY-MM-DD'),'YYYY-MM-DD') - to_date(to_char(apply_time,'YYYY-MM-DD'),'YYYY-MM-DD') + integer '1')

10.表名和系统视图可能重名,要加模式名.表名区分

11.is_delete = false 改为 is_delete = 0,字段值为0不能使用false来过滤

到此这篇关于MySQL迁移KingbaseESV8R2的实现步骤的文章就介绍到这了,更多相关MySQL 迁移 KingbaseESV8R2内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql 备份与迁移 数据同步方法

    不过最近发现这个可视化操作有点点问题,就是当数据条数超过一定数目EMS SQL Manager就挂了,也不知道是否是软件问题--当然该开始我是将大的数据库文件分拆成小份小份的,多次导入. 刚才发现同事用了mysql 自带的mysqldump 工具就不存在这个问题. (羞愧,不过我平时极少接触数据库) 这里记录下操作方式: 1. 进入bin目录,执行命令: mysqldump -hlocalhost -uroot -padmin local_db > a.sql 2. 这时发现在bin目录生成了

  • mysql数据库迁移至Oracle数据库

    本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracle SQL Developer 4.0.0.12.84(点击可进入下载页面) 特别说明:最初我用的一直是高版本的SQL Developer,但在数据库移植到大概两分钟的时候,总是报错,而错误信息又不明确.最后换成 Oracle SQL Developer 4.0.0.12.84,才把问题解决掉!如果

  • oracle数据库迁移到MySQL的方法总结

    前言 之前搭建了一个ExtJS + spring + Oracle 的这样一个报表系统的框架. 因为其他部门的要求, 也需要这个Framework 进行一些特殊的定制. 但是有一个问题是 Oracle 的数据库是需要收费的, 个人使用倒没什么问题, 公司使用的话就会有侵权的问题了. 而MySQL 则是完全免费的. 所以使用 ExtJS + Spring + MySQL  这样的组合应该就没什么问题了. 理论上来说, MySQL 已经被Oracle 收购, 这两者之间的Migrate 应该比较容易

  • 关于MySQL数据迁移--data目录直接替换注意事项的详解

    近日更换服务器,要做数据库迁移,将数据库内的数据从服务器A迁移到服务器B.由于数据量较大,直接做dump耗时太长,故而采用如下方式处理:首先,在服务器B上安装了与服务器A同版本的MySQL,停止MySQL服务,将安装后的data目录删除:然后,服务器A锁住全部表,从服务器A将整个data目录和数据文件直到拷贝到服务器B上,修改服务器B上MySQL的my.cnf文件中的datadir指向新的data目录.最后,启动服务器B上的MySQL服务.结果启动失败,报出 "无法启动MySQL服务"

  • 深入ORACLE迁移到MYSQL的总结分析

    这两个星期里一直都在忙于一件事儿,就是数据库的迁移问题.没有做的时候感觉这是一件十分轻松的事儿,可是等到实实在在去做去实现的时候,自己傻眼了.这种纠结啊, 在这里先说下遇到的问题:1.数据库的表结构问题:数据类型不同需要解决varchar2------varchar.number-----int.date----datetime,建表的sql语句字段默认值.注释怎么解决. 2. oracle中没有所谓的敏感字段,可是mysql表中的敏感字段有好多.当时出错的时候很奇怪不知道是哪里错了.原来有个d

  • 浅析mysql迁移到clickhouse的5种方法

    数据迁移需要从mysql导入clickhouse, 总结方案如下,包括clickhouse自身支持的三种方式,第三方工具两种. create table engin mysql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], name2 [type2] [DEFAULT|MATERIAL

  • Mysql的数据库迁移到另一个机器上的方法详解

    1.先找到迁移服务器上的Data文件,我安装的是mysql5.7,默认安装的路径.那么就是在C:\ProgramData\MySQL文件里面,先把隐藏文件打开. 这个Data文件就是你的数据文件:将你要迁移的数据库文件放到这里如下: 然后打开my.ini:找到datadir,然后将你的Data文件路径复制到下面,你要启动哪一个Data文件就用那个文件的地址,只能存在一个.如下: 然后在重启MySQL服务如下: 然后打开数据库连接工具,我这边用的Navicat,你连接迁移数据库,是你迁移之前的密码

  • MySQL迁移KingbaseESV8R2的实现步骤

    目录 1. 使用Oracle中转 2. 使用KingbaseESV8R3中转 3. 其他问题 1.自增 2.uuid 4. 已发现的 SQL 问题 1. 使用Oracle中转 KingbaseESV8R2只支持从Oracle迁移,所以先MySQL迁移到Oracle. 迁移到Oracle问题:1.oracle对表名有最大30位限制2.invalid hex number,无效16进制3.表数据空,报cannot insert NULL into4.索引名太长 MySQL迁移Oracle问题就很多了

  • MySQL 集群迁移到 Kubernetes操作步骤

    目录 背景 适用场景 前提条件 操作步骤 Step 1:自建集群开启 GTID Step 2:容器集群在线迁移全量数据 Step 3:进行增量同步 Step 4:同步数据到容器集群的其他节点 Step 5:业务切换 Step 6:停止同步 总结 背景 如果你有自建的 MySQL 集群,并且已经感受到了云原生的春风拂面,想将数据迁移到 Kubernetes 上,那么这篇文章可以给你一些思路. 文中将自建 MySQL 集群数据,在线迁移到 Kubernetes 的 MySQL 集群中,快速实现了 M

  • 一次mysql迁移的方案与踩坑实战记录

    目录 背景 方案一:老数据备份 方案二:分表 方案三:迁移至tidb 重点说下同步老数据遇到的坑 最终同步脚本方案 总结 背景 由于历史业务数据采用mysql来存储的,其中有一张操作记录表video_log,每当用户创建.更新或者审核人员审核的时候,对应的video_log就会加一条日志,这个log表只有insert,可想而知,1个video对应多条log,一天10w video,平均统计一个video对应5条log,那么一天50w的log, 一个月50 * 30 = 1500w条记录, 一年就

  • 最新Navicat 15 for MySQL破解+教程 正确破解步骤

    目录 mysql数据库的使用,navicate数据库操作工具破解版软件和操作步骤 下载地址: 破解步骤: Navicat for MySQL是一个针对MySQL数据库而开发的第三方mysql管理工具,该软件可以用于 MySQL 数据库服务器版本 3.21 或以上的和 MariaDB 5.1 或以上.能够同时连接 MySQL 和 MariaDB 数据库,并与 Amazon RDS.Amazon Aurora.Oracle Cloud.Microsoft Azure.阿里云.腾讯云和华为云等云数据库

  • Linux下将数据库从MySQL迁移到MariaDB的基础操作教程

    自从2012年来,维基百科已经开始从MySQL迁移到MariaDB的过程,是维基媒体数据库架构变革的一个重大里程碑,将英文和德文版的维基百科数据库Wikidata移植到了MariaDB 5.5版本上. 在过去几年中,维基百科一直使用 Facebook 的 MySQL 5.1 衍生版本 作为我们的产品数据库,构建版本号是r3753.我们很高兴该产品的性能表现,Facebook 有着全世界最棒的数据库工程师,他们为 MySQL 生态系统带去了很多改进. 现在 MariaDB 的优化器的增强.Perc

  • Mysql非安装版使用步骤及忘记密码解决方法

    第一步 将压缩包解压到相应的磁盘下. 第二步 打开cmd进入解压后的文件夹的bin目录下,运行mysqld -install. 第三步 开启服务:cmd进入解压的文件夹下,执行net start mysql. 第四步 安装图像界面navicat. 忘记密码的解决方法: 1. 管理员登陆系统,停止MySQL服务或者结束mysqld 进程 2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:\mysql\ , CMD进入 命令行 3. 运行 d:\MYSQL\bin\mysqld --s

  • 数据从MySQL迁移到Oracle 需要注意什么

    将数据从MySQL迁移到Oracle的注意事项,有如下几点 1.自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段. CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; INSERT 语句插入这个字段值为:

  • MySQL解压版配置步骤详细教程

    mysql-5.7.14-winx64\bin配置到Path中 在解压路径下复制my-default.ini,修改名称为my.ini 在my.ini添加如下 [mysqld] basedir=C:\\software\Mysql\mysql-5.7.14-winx64 datadir=C:\\software\Mysql\mysql-5.7.14-winx64\data port=3306 basedir:是上述mysql的解压路径 datadir:后续初始化等数据都会保存在该目录下,在该文件目

  • mysql 8.0.11 安装步骤详解

    本文为大家分享了mysql 8.0.11 安装步骤,供大家参考,具体内容如下 第一步:下载安装包 MYSQL官方下载地址:官方下载 这里第一项是在线安装,第二项是离线包安装,我选择的是第二项(不用管你电脑是多少位的操作系统),因为: Note: MySQL Installer is 32 bit, but will install both 32 bit and 64 bit binaries. 不用注册.登录,直接选择左下按钮下载:No thanks,just start my downloa

  • windows下mysql 8.0.12安装步骤及基本使用教程

    本文实例为大家分享了windows下mysql 8.0.12安装步骤及使用教程,供大家参考,具体内容如下 1.到官网下载下载SQL. (1.1)下载地址 打开网页后,点击go to download page如下图: (1.2)然后选择第二个'Windows (x86, 32-bit), MSI Installer',点击'download' (1.3)点击'No thanks, just start my download.'如下图 2.进行安装 (2.1)下载后,进行安装,进入license

随机推荐