iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >从 MySQL迁移数据到Oracle
  • 235
分享到

从 MySQL迁移数据到Oracle

mysql数据库中间件centos 2024-01-21 15:01:00 235人浏览 安东尼
摘要

从 Mysql 迁移数据到 oracle 中的全过程 zhengqingya 22019.12.26 16:53:14字数 911阅读 480 一、前言 这里记录一次将mysql数据库中的表数

Mysql 迁移数据到 oracle 中的全过程

zhengqingya
22019.12.26 16:53:14字数 911阅读 480

一、前言

这里记录一次将mysql数据库中的表数据迁移到Oracle数据库中的全过程 ,使用工具 Navicat,版本 12.0.11
操作环境及所用工具:
mysql5.7
oracle18c
windows
Navicat12.0.11
idea

在这里插入图片描述

二、开始移植

点击 工具 -> 数据传输
在这里插入图片描述

左边 源 标识mysql数据库 , 右边 目标 标识要移植到的oracle数据库
在这里插入图片描述

高级选项中勾选大写
温馨小提示:
如果字段名和表名都为小写,oracle操作数据的时候将会出现找不到表或视图的错误,解决方法是必须加上双引号才能查询到, 这样的话我们通过程序操作数据的时候必须加上双引号,即大大加重了迁移数据库后的工作量,因此这里需勾选转换对象名为大写 ,同时在转换过程中如果字段名出现oracle关键字的话,它会自动给我们加上双引号解决关键字的困扰!!!
【 ex: user -> “USER” number -> “NUMBER” desc -> “DESC” level -> “LEVEL” 】
在这里插入图片描述

选择需要移植的表,这里我一把梭全选了~
在这里插入图片描述

然后等待数据传输完成

在这里插入图片描述

如果最后遇到如下情况,可暂不管,直接关闭即可~

在这里插入图片描述

然后查看oracle,如下,数据导入成功

在这里插入图片描述

温馨小提示:传输过程中可能会存在有部分几张表不成功,手动导一下就好了~~

三、问题

解决oracle自增主键
oracle设置自增主键的几种方式:
序列 + 触发器
序列 + Hibernate配置 (注:此方式仅适用于通过Hibernate连接数据库的方式)
oracle12c版本之后新增 自增列语法 GENERATED BY DEFAULT AS IDENTITY
解决思路:
在ddl 创建表sql中添加自增主键的命令,重新创建一次表结构,然后再将oracle中的数据单独导入
这里由于小编oracle版本为18c 因此在创建表的时候加上自增主键语法即可完成!
① 备份数据 -> 数据泵方式
数据泵 -> 数据泵导出

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

② idea中如下查看ddl

在这里插入图片描述

然后将ddl拷贝到一个txt文本文件中保存

在这里插入图片描述
③ ddl文件内容替换自增主键工具类
温馨小提示:
这里小编数据库中的时间类型为 DATE 类型 需 改为 TIMESTAMP 类型 ,这个问题可以直接使用idea的替换功能完成修改~ ,其余修改可根据个人实际情况来进行修改

在这里插入图片描述

public class MySQLToOracleTest {

public static void main(String[] args) {
    try {
        replaceDDLContent("D:\\Users\\zq\\Desktop\\oracle测试\\oracle_ddl.txt"); // TODO 这里修改为自己的ddl文件存放位置
    } catch (ioException e) {
        e.printStackTrace();
    }
}


public static void replaceDDLContent(String path) throws IOException {
    // 原有的内容
    String srcStr = "not null";
    // 要替换的内容
    String replaceStr = "GENERATED BY DEFAULT AS IDENTITY";
    // 读
    File file = new File(path);
    FileReader in = new FileReader(file);
    BufferedReader bufIn = new BufferedReader(in);
    // 内存流, 作为临时流
    CharArrayWriter tempStream = new CharArrayWriter();
    // 替换
    String line = null;
    // 需要替换的行
    Map lineMap = new HashMap<>(104);
    //定义顺序变量
    int count = 0;
    while ((line = bufIn.readLine()) != null) {
        count++;
        if (line.contains("create table")) {
            lineMap.put(count + 2, line);
        }

        //遍历map中的键
        for (Integer key : lineMap.keySet()) {
            if (count == key && !line.contains("NVARCHAR2")) {
                // TODO 在这里这是自增主键哦
                line = line.replaceAll(srcStr, replaceStr);
                lineMap.put(count, line);
            }
        }

        // 将该行写入内存
        tempStream.write(line);
        // 添加换行符
        tempStream.append(System.getProperty("line.separator"));
    }
    // 关闭 输入流
    bufIn.close();
    // 将内存中的流 写入 文件
    FileWriter out = new FileWriter(file);
    tempStream.writeTo(out);
    out.close();
    System.out.println("文件存放位置:" + path);
    System.out.println(lineMap);
}

}

④ 将替换过后的ddl拷贝到idea中的一个新控制台中运行创建表
全选ddl,然后点击左上角运行创建表 【 注:这里需先清空该库下所有表,因此步骤①要先备份一下从mysql迁移到oracle后的表数据,不要忘记哦!!】

在这里插入图片描述

等待表全部创建成功,如下所示:

在这里插入图片描述

⑤ 导入备份数据
数据泵 -> 数据泵导入

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

⑥ 最后查看数据导入成功!

在这里插入图片描述

这时候,数据有了,自增主键也有了,但是存在一个问题就是插入数据的时候主键自增ID都是从1开始自增,如果表中没有数据都还ok,问题是如果表有数据,就会出现主键ID重复的问题!!!
2、解决自增主键ID无法从表数据ID最大值开始增值
思路:拼接出修改表自增ID从几开始的sql即可!
SELECT
‘SELECT ‘‘ALTER TABLE SEWAGE_GY.’ || t1.table_name || ’ MODIFY(’ || t1.Column_Name || ’ Generated as Identity (START WITH ‘’ || MAX( ’ || t1.Column_Name || ‘+1 ) || ‘’));’’ FROM ’ || t1.table_name || ’ UNION ALL’ AS FINAL_SQL
FROM cols t1
LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_Name
LEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name
WHERE
NOT EXISTS (
SELECT t4.Object_Name
FROM User_objects t4
WHERE
t4.Object_Type = ‘TABLE’
AND t4.TEMPORARY = ‘Y’
AND t4.Object_Name = t1.Table_Name
)
AND t1.IDENTITY_COLUMN = ‘YES’
ORDER BY t1.Table_Name, t1.Column_ID

命令解析:

设置表主键ID从多少开始自增 ex:下面标识从10000开始自增

ALTER TABLE 数据库名.表名 MODIFY(主键ID Generated as Identity (START WITH 10000));

查询该库下所有表名

SELECT table_name FROM user_tables;

查询出指定表的主键ID字段名

SELECT t1.table_name,t1.Column_Name
FROM cols t1
LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_Name
LEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name
WHERE NOT EXISTS (
SELECT t4.Object_Name
FROM User_objects t4
WHERE t4.Object_Type = ‘TABLE’
AND t4.TEMPORARY = ‘Y’
AND t4.Object_Name = t1.Table_Name
)
AND t1.table_name = ‘表名’
AND t1.IDENTITY_COLUMN = ‘YES’
ORDER BY t1.Table_Name, t1.Column_ID

查询该库下所有表名+表主键字段名

SELECT t1.table_name,t1.Column_Name
FROM cols t1
LEFT JOIN user_col_comments t2 ON t1.Table_name = t2.Table_name AND t1.Column_Name = t2.Column_Name
LEFT JOIN user_tab_comments t3 ON t1.Table_name = t3.Table_name
WHERE NOT EXISTS (
SELECT t4.Object_Name
FROM User_objects t4
WHERE t4.Object_Type = ‘TABLE’
AND t4.TEMPORARY = ‘Y’
AND t4.Object_Name = t1.Table_Name
)
AND t1.IDENTITY_COLUMN = ‘YES’
ORDER BY t1.Table_Name, t1.Column_ID

在这里插入图片描述

拷贝到新的控制台后注意删除最后一个 UNION ALL 再运行哦!!!

在这里插入图片描述

最终完成自增主键ID从表数据最大值开始自增!

在这里插入图片描述

程序中的sql语句转换
这里结合个人语言实际操作…
12人点赞
SpringBoot

来源地址:https://blog.csdn.net/qq_35757427/article/details/132971626

您可能感兴趣的文档:

--结束END--

本文标题: 从 MySQL迁移数据到Oracle

本文链接: https://www.lsjlt.com/news/556245.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 从 MySQL迁移数据到Oracle
    从 MySQL 迁移数据到 Oracle 中的全过程 zhengqingya 22019.12.26 16:53:14字数 911阅读 480 一、前言 这里记录一次将MySQL数据库中的表数...
    99+
    2024-01-21
    mysql 数据库 中间件 centos
  • GoldenGate从oracle迁移数据到mysql
      1       软件简介 安装时应该选择最为稳定的安装版本,现在官方发布的版本主要为: Oracle G...
    99+
    2024-04-02
  • 怎么从MySQL迁移到Oracle
    这篇文章主要讲解了“怎么从MySQL迁移到Oracle”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么从MySQL迁移到Oracle”吧! 1. 自动增...
    99+
    2024-04-02
  • 怎样从Oracle到GaussDB的数据迁移
    今天就跟大家聊聊有关怎样从Oracle到GaussDB的数据迁移,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 一、背景最近某省运营商O域...
    99+
    2024-04-02
  • Django数据怎么从sqlite迁移数据到MySQL
    Django数据怎么从sqlite迁移数据到MySQL,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。昨天快速搭建了一套自己的知识库。感觉一下子有了很多的事情要做...
    99+
    2023-06-04
  • 如何将数据从 Oracle 迁移到 MySQL:分步指南
    数据迁移在各种业务场景中发挥着至关重要的作用。当您的公司将其服务从本地迁移到云端时,数据迁移就会介入,将数据从旧位置传输到新位置。另一种常见的做法可能是更换或升级服务器或存储设备。在这种情况下,数据迁移可确保数据的顺利高效传输,最大限度地减...
    99+
    2023-08-31
    oracle mysql 数据库
  • Oracle数据迁移MySQL
    前言: 现今,Oracle数据迁移MySQL的需求已经越来越普遍,主要的迁移场景大致可以分为三类,第一类是涉及小表以及少量表的一次性迁移,无需进行增量同步,第二类是涉及大表以及多表的一次性迁移,第三类是涉及增量实时同步,而对于数据的迁移方法...
    99+
    2023-09-26
    oracle mysql 数据库 运维 dba
  • oracle上的数据怎么迁移到到mysql
    这篇文章主要介绍“oracle上的数据怎么迁移到到mysql”,在日常操作中,相信很多人在oracle上的数据怎么迁移到到mysql问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 【数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践
    在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、...
    99+
    2023-08-17
    数据库 mysql bash 云原生
  • 从MySQL迁移到Oracle数据库的详细步骤和方法
    系列文章目录 文章目录 系列文章目录前言一、备份MySQL数据库二、安装Oracle数据库三、数据转换四、导出MySQL数据五、导入数据到Oracle六、重新创建索引和约束七、测试和验证八、...
    99+
    2023-09-24
    数据库 mysql oracle
  • 怎么从AIX将数据库迁移到Linux Oracle中
    本篇内容主要讲解“怎么从AIX将数据库迁移到Linux Oracle中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么从AIX将数据库迁移到Linux Ora...
    99+
    2024-04-02
  • Oracle怎么迁移数据到Greenplum
    这篇文章主要介绍“Oracle怎么迁移数据到Greenplum”,在日常操作中,相信很多人在Oracle怎么迁移数据到Greenplum问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle怎么迁移数据到...
    99+
    2023-06-03
  • 【数据库迁移系列】使用pgloader将数据从MySQL迁移到openGauss的最佳实践
    数据库迁移是实际工作中经常遇到的问题,比如由于磁盘空间、业务性能、项目改造等等原因,有从甲服务器迁移到乙服务器,从A种数据库迁移到B种数据库,从源路径迁移到另一个目标路径、同一个机器下从一个用户迁移到...
    99+
    2023-08-31
    mysql 数据库 云原生 docker
  • Oracle数据库怎么从Linux x86单机迁移到Solaries
    这篇文章主要介绍“Oracle数据库怎么从Linux x86单机迁移到Solaries”,在日常操作中,相信很多人在Oracle数据库怎么从Linux x86单机迁移到Solaries问题上存在疑惑,小编查...
    99+
    2024-04-02
  • oracle数据库迁移到MySQL的示例分析
    这篇文章给大家分享的是有关oracle数据库迁移到MySQL的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方式一: 手动方式导入导出手动的方式导入, 就是操作步骤会比较...
    99+
    2024-04-02
  • JSON数据怎么从MongoDB迁移到MaxCompute
    这篇文章主要介绍“JSON数据怎么从MongoDB迁移到MaxCompute”,在日常操作中,相信很多人在JSON数据怎么从MongoDB迁移到MaxCompute问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-04
  • JSON数据怎么从OSS迁移到MaxCompute
    这篇文章主要讲解了“JSON数据怎么从OSS迁移到MaxCompute”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JSON数据怎么从OSS迁移到MaxCo...
    99+
    2024-04-02
  • 【ClickHouse】从Mysql迁移到ClickHouse大全
    从关系型的数据库(Mysql)升级到列式管理的联机分析型数据库(ClickHouse),这不亚于是小米加步枪升级为加特林机关枪的性能提升了,查询能力等确实是大大的提升了,这出现了一个问题我们之前存储在Mysql里的历史数据怎么往Clic...
    99+
    2023-09-25
    mysql 数据库 ClickHouse
  • 实时同步!从MySQL到SelectDB的无缝数据迁移
    随着数据分析在业务决策中变得日益重要,数据实时同步和分析成为企业提升竞争力的关键。MySQL 作为广泛使用的关系型数据库,其数据存储丰富,但无法满足大规模数据分析和高并发查询的需求。而 SelectDB 作为一款专为大数据分析设计的分布式数...
    99+
    2023-09-06
    mysql 数据库 数据库开发 dba
  • 从MYSQL到oracle的迁移以及备份的方法
    本篇内容介绍了“从MYSQL到oracle的迁移以及备份的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作